我的图像加载阻塞 UI 线程时遇到问题,因此我的 gridview 在我的 Windows 商店应用程序中没有响应。
我想要做的是让 gridview 中的图像绑定到我的视图模型中的图像属性。image 属性的值由异步方法设置。当应用程序启动时,它会加载所有对象,但不会加载实际的图像数据。当 UI 虚拟化启动并通过绑定到 xaml 中的图像控件的图像属性请求图像数据时,将加载图像数据。
所有这些都在 observablecollection 中完成。
这是一些代码:
private ImageSource _image = null;
private String _imagePath = null;
public ImageSource Image
{
get
{
SetImageFromStorageFile().ContinueWith(OnAsyncFail, TaskContinuationOptions.OnlyOnFaulted);
return this._image;
}
}
private async Task SetImageFromStorageFile()
{
this.IsLoading = true;
if (this._image == null && this._imagePath != null)
{
this._image = await BitmapLoader.GetPreviewImageFromStorageFile(this.StorageFile); //getting the actual data here
this.OnPropertyChanged("Image");
}
this.IsLoading = false;
}
除了访问图像数据时 UI 变得无响应之外,这一切都很好。
如您所见,我正在从属性调用异步方法,我只是在重用从其他地方调用的代码。当从其他地方调用时,我可以使用 await 并且 UI 是响应式的。问题是,当使用 gridviews UI 虚拟化时,我不知道如何在不阻塞 UI 的情况下运行此异步方法,因为属性无法运行异步(据我所知)。
所以我只想让gridview异步运行这个属性(或方法)而不是同步,但不知道该怎么做。
请帮忙 :)