У меня есть фоновый поток, который генерирует серию объектов BitmapImage. Каждый раз, когда фоновый поток заканчивает создание растрового изображения, я хотел бы показать это растровое изображение для пользователя. Проблема заключается в том, как передать BitmapImage из фонового потока в поток пользовательского интерфейса.
Это проект MVVM, поэтому мой взгляд имеет элемент Image:
<Image Source="{Binding GeneratedImage}" />
Моя модель просмотра имеет свойство GeneratedImage:
private BitmapImage _generatedImage;
public BitmapImage GeneratedImage
{
get { return _generatedImage; }
set
{
if (value == _generatedImage) return;
_generatedImage= value;
RaisePropertyChanged("GeneratedImage");
}
}
Моя модель просмотра также имеет код, создающий фоновый поток:
public void InitiateGenerateImages(List<Coordinate> coordinates)
{
ThreadStart generatorThreadStarter = delegate { GenerateImages(coordinates); };
var generatorThread = new Thread(generatorThreadStarter);
generatorThread.ApartmentState = ApartmentState.STA;
generatorThread.IsBackground = true;
generatorThread.Start();
}
private void GenerateImages(List<Coordinate> coordinates)
{
foreach (var coordinate in coordinates)
{
var backgroundThreadImage = GenerateImage(coordinate);
// I'm stuck here...how do I pass this to the UI thread?
}
}
Я бы как-то передал backgroundThreadImage в поток пользовательского интерфейса, где он станет uiThreadImage, а затем установите GeneratedImage = uiThreadImage, чтобы представление могло обновляться. Я рассмотрел некоторые примеры работы с WPF Dispatcher, но я не могу представить пример, который решает эту проблему. Просьба сообщить.