我正在使用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線程上下文中,但不知道如何解決它?
謝謝 - 這似乎有所幫助。現在在別處獲得相同的錯誤,所以我應該能夠應用類似的修復程序。 – James