Използвам модела MVVM за разработване на WPF приложение.
Приложението зарежда captcha изображение от сървъра и го присвоява на изображение във 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 връща грешка в нишката на GUI. Знам го, защото имам достъп до него от GUI нишката на диспечера, когато беше създаден в BackgroundWorker нишка, но как да го заобиколя?
Помощта ще бъде високо оценена! :)