Я использую шаблон MVVM для разработки приложения WPF.
Приложение загружает изображение captcha с сервера и назначает его Image в форме WPF, когда оно будет готово. Я использую BackgroundWorker для потоковой передачи, а именно:
Когда окно загружается, вызывается следующее:
BackgroundWorker _bgWorker = new BackgroundWorker();
_bgWorker.DoWork += GetCaptchaImage;
_bgWorker.RunWorkerAsync();
Функция GetCaptchaImage довольно проста, загружая изображение в другой поток:
BitmapSource _tempBitmap = GetCaptchaFromServer();
Мне нужно знать, как вызвать диспетчер, чтобы назначить этот ImageSource источнику изображения моего окна. В настоящее время я вызываю диспетчер после загрузки _tempBitmap следующим образом:
Application.Current.Dispatcher.Invoke(
new Action(() => CaptchaBitmap = _tempBitmap));
Где CaptchaBitmap привязан к моему источнику изображения.
Однако, когда я это делаю, выдается исключение InvalidOperationException, и любая ссылка на _tempBitmap возвращает ошибку в потоке графического интерфейса. Я знаю это, потому что обращаюсь к нему из потока графического интерфейса диспетчера, когда он был создан в потоке BackgroundWorker, но как мне обойти это?
Помощь будет принята с благодарностью! :)