我正在使用 MVVM 模式来开发 WPF 应用程序。
该应用程序从服务器加载验证码图像,并在准备好后将其分配给 WPF 表单上的图像。我正在使用 BackgroundWorker 为我做线程,如下所示:
加载 Window 时,将调用以下命令:
BackgroundWorker _bgWorker = new BackgroundWorker();
_bgWorker.DoWork += GetCaptchaImage;
_bgWorker.RunWorkerAsync();
GetCaptchaImage 函数相当简单,在另一个线程中加载图像:
BitmapSource _tempBitmap = GetCaptchaFromServer();
我需要知道如何调用 Dispatcher 将此 ImageSource 分配给我的 Window 的图像源,目前我在加载 _tempBitmap 后调用调度程序,如下所示:
Application.Current.Dispatcher.Invoke(
new Action(() => CaptchaBitmap = _tempBitmap));
CaptchaBitmap 数据绑定到我的图像源的位置。
但是,当我这样做时,会引发 InvalidOperationException,并且对 _tempBitmap 的任何引用都会在 GUI 线程中返回错误。我知道它是因为当它是在 BackgroundWorker 线程中创建时,我从调度程序 GUI 线程访问它,但我该如何解决呢?
帮助将不胜感激!:)