Я думаю, что происходит состояние гонки. Некоторые из ваших изображений не завершили загрузку к моменту, когда вы попросите их отобразить. Существует очень хороший пример, приведенный здесь http://social.msdn.microsoft.com/Forums/en/wpf/thread/dc4d6aa9-299f-4ee8-8cd4-27a21ccfc4d0 который я подытожить:
private ImageSource _Src;
public ImageSource Src
{
get { return _Src; }
set
{
_Src = value;
if (PropertyChanged != null)
PropertyChanged(this, new PropertyChangedEventArgs("Src"));
((BitmapImage)_Src).DownloadCompleted += new EventHandler(MainWindow_DownloadCompleted);
}
}
void MainWindow_DownloadCompleted(object sender, EventArgs e)
{
PropertyChanged(this, new PropertyChangedEventArgs("Src"));
((BitmapImage)_Src).DownloadCompleted -= MainWindow_DownloadCompleted;
}
С выше коде, ваши образы, которые являются обязательными для вашего имущества будет сказано обновить с вызовом PropertyChanged, когда значение первого а также ПОСЛЕ того, как изображения загружены на 100%. Об этом заботится обработчик событий DownloadCompleted, который используется в приведенном выше примере. Это должно заставить их больше не выглядеть как черное изображение, а как их полностью готовые «я».
Кроме того, если вы используете поток в качестве источника для своих изображений, вам необходимо убедиться, что вы используете BitmapCacheOption.OnLoad. Такие, как:
BitmapImage source = new BitmapImage();
source.BeginInit();
source.CacheOption = BitmapCacheOption.OnLoad;
source.StreamSource = yourStream;
source.EndInit();
Это происходит потому, что по умолчанию изображение с помощью источника будет ленивая нагрузка он и тогда ваш поток, вероятно, закрыт, что также может быть, почему вы получаете пустые/черные изображения.
Удачи.
Примечание: Я попытался решить эту проблему, загрузив изображения локально (у меня ограниченное количество продуктов, поэтому это имело смысл в любом случае), но у меня все еще есть эта проблема. Таким образом, это определенно условие гонки, но не ограничивается сетевой активностью - и даже загрузка из локального URI файла. –