我有一个后台线程,它生成一系列BitmapImage
对象。每次后台线程完成生成一个位图时,我都想向用户显示这个位图。问题是弄清楚如何将BitmapImage
从后台线程传递到UI线程。
这是一个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");
}
}
我的view-model也有创建后台线程的代码:
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
传递给UI线程,在那里它将变成uiThreadImage
,然后设置GeneratedImage = uiThreadImage
以便视图可以更新。我看过一些处理WPF Dispatcher
的例子,但是我似乎想不出一个解决这个问题的例子。请给我建议。
https://stackoverflow.com/questions/3034902
复制相似问题