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 スレッド コンテキストにあるためだと思いますが、解決方法がわかりませんか?