私はMVVMパターンを使用してWPFアプリケーションを開発しています。ディスパッチャでWPFオブジェクトにアクセスする方法は?
アプリはサーバーからキャプチャイメージをロードし、準備完了時に をWPFフォームのImageに割り当てます。私は次のように、私のためのスレッドを実行するために のBackgroundWorkerを使用しています:
ウィンドウには、以下が呼び出され、ロードされているとき:
BackgroundWorker _bgWorker = new BackgroundWorker();
_bgWorker.DoWork += GetCaptchaImage;
_bgWorker.RunWorkerAsync();
GetCaptchaImage機能は画像 をロードし、かなり単純です別のスレッドで:
BitmapSource _tempBitmap = GetCaptchaFromServer();
私は現在、私はを呼んで、私の窓のイメージソースに、この ImageSourceはを割り当てるためにディスパッチャを起動する方法を知っておく必要があります次のように_tempBitmapをロードした後ディスパッチャ:CaptchaBitmapは私のイメージソースにデータバインドされ
Application.Current.Dispatcher.Invoke(
new Action(() => CaptchaBitmap = _tempBitmap));
。
ただし、これを実行するとInvalidOperationExceptionがスローされ、 および_tempBitmapへの参照によってGUI スレッドでエラーが返されます。 BackgroundWorkerスレッドで作成されたディスパッチャー GUIスレッドからアクセスしているので、私はそのことを知っていますが、どうすれば を回避できますか?
大変お手伝いいたします。 :)
私はこの問題の最後の1時間、私の髪を引き裂いてきました。ありがとう! –