MVVM パターンを使用して WPF アプリケーションを開発しています。
アプリはサーバーからキャプチャ イメージを読み込み、準備ができたら WPF フォームのイメージに割り当てます。次のように、BackgroundWorker を使用してスレッドを実行しています。
Window がロードされると、以下が呼び出されます。
BackgroundWorker _bgWorker = new BackgroundWorker();
_bgWorker.DoWork += GetCaptchaImage;
_bgWorker.RunWorkerAsync();
GetCaptchaImage 関数はかなり単純で、画像を別のスレッドにロードします。
BitmapSource _tempBitmap = GetCaptchaFromServer();
Dispatcher を呼び出して、この ImageSource を Window のイメージ ソースに割り当てる方法を知る必要があります。現在、次のように _tempBitmap を読み込んだ後に Dispatcher を呼び出します。
Application.Current.Dispatcher.Invoke(
new Action(() => CaptchaBitmap = _tempBitmap));
CaptchaBitmap が画像ソースにデータバインドされている場所。
ただし、これを行うと、InvalidOperationException がスローされ、_tempBitmap への参照は GUI スレッドでエラーを返します。BackgroundWorker スレッドで作成されたときにディスパッチャー GUI スレッドからアクセスしているため、それはわかっていますが、どうすれば回避できますか?
助けていただければ幸いです。:)