在 Windows Metro 应用程序(发布预览版)中,我从数据点动态创建图像并使用数据绑定来显示图像。
由于图像创建是相当繁重的处理,我希望它在一个任务中完成。所以我的财产目前编码如下:
public ImageSource Diagram
{
get
{
if (this.diagram == null)
{
DiagramGenerator.GetDiagram(this.DataPoints, this.Width, this.Height).ContinueWith((t) =>
{
this.Diagram = t.Result;
}
}
return this.diagram;
}
set
{
this.SetProperty(ref this.diagram, value);
}
}
DiagramGenerator 看起来像:
public static async Task<ImageSource> DiagramGenerator.GetDiagram(List<DataPoint> dataPoints, int width, int height)
{
WriteableBitmap bmp = BitmapFactory.New(width, height);
// Build the image...
return bmp;
}
在 Xaml 中,我的绑定非常简单
<Image Source="{Binding Diagram}" Stretch="UniformToFill"/>
不幸的是,使用上面的代码不起作用。
我在 OnPropertyChanged 方法中出现异常(例如,在上面的 this.Diagram = t.Result 之后):“应用程序调用了一个为不同线程编组的接口。”
然后我尝试使用以下方法编组到 UI 线程:
Window.Current.Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Norma, () => { this.Diagram = t.Result; });
但这也不起作用,因为 Window.Current 为空!
怎么能解决这个问题?
非常感谢您的建议。