У меня есть код, который имеет 4 фоновых рабочих, которые получают URL-адреса изображений из моей базы данных.У каждого есть цикл foreach, который получает результаты базы данных в список.Затем изображения создаются на ходу с этим кодом.
this.Bitmap = new BitmapImage(new Uri( -URL- , UriKind.Absolute));
Bitmap.DownloadCompleted += new EventHandler( -Event Below- );
И событие проверяет, есть ли на нем изображение или нет (потому что изображение всегда есть, но оно пустое, если ссылка недействительна), печать текста "Нет изображения", если его нет.
if (((BitmapImage)sender).Width > 1)
this.AddChild(Image);
else
this.AddChild(new TextBlock() { Text = "No Image Available" });
Этот вид работает с моими списками.Но проблема возникает, когда у меня более длинный запрос, который занимает больше времени для выполнения.Итак, некоторые изображения отсутствуют, и на них нет сгенерированного текста.Но некоторые в порядке и работают отлично.Вот мой класс sqlHandler, если у меня проблема с читателем.
MySqlDataReader reader = mySqlCommand.ExecuteReader();
{
while(reader.Read())
//Get stuff
...
А вот метод фонового рабочего doWork:
this.Dispatcher.Invoke(() =>
{
foreach (Book book in list)
{
if (book != null)
wrapPopular.Children.Add(new object_that_generates_the_bitmap);
}
});
Я предполагаю, что это проблема с потоком, но яне знаю как это исправить.