我正在使用 async/await 等将一些长时间运行的代码移到后台,但遇到了主题行错误。我很清楚我无法从任务中更新我的 WPF UI 控件(并且我已经适当地添加了调度程序),但是这个错误只是在我的类中更新一个对象时发生的。例子:
private WriteableBitmap TempImage;
public async void StartProcessing()
{
WriteableBitmap LoadedImage = new WriteableBitmap(await LoadImage(0)); //ERROR HERE
LoadedImage.Freeze();
TempImage = LoadedImage;
// do more stuff
}
private Task<BitmapImage> LoadImage(int imageIndex)
{
return Task.Run(() =>
{
FileStream fileStream = new FileStream(fileList[0], FileMode.Open, FileAccess.Read);
var img = new BitmapImage();
img.BeginInit();
img.StreamSource = fileStream;
img.EndInit();
return img;
});
}
“冻结”的东西是我目前解决它的尝试,但只要我尝试将返回的图像分配给我的类级变量,它仍然会发生。我假设这是因为我的 UI 线程实例化了该类,因此变量位于 UI 线程上下文中,但不确定如何解决它?