У меня есть фоновый поток, который генерирует серию объектов 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
, но я не могу представить пример, который решает эту проблему. Просьба сообщить.