我有一个后台线程,会生成一系列的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");
}
}
我的视图模型也有创建后台线程的代码:
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
的示例,但似乎没有例子解决此问题。请给予建议。
GeneratedImage
尚未设置为对象的实例,我该如何解决这个问题? - devuxerApplication.Current.Dispatcher
获取 Dispatcher。 - Simon Fox