从WPF应用程序调用Dispatcher时失败



我有一个WPF MVVM应用程序,在不同的线程上运行一些逻辑,然后当我想做一个UI更新(隐藏主窗口)时,我调用Dispatcher.BeginInvoke()方法并得到以下错误:

"必须在与DependencyObject相同的线程上创建DependencySource ".

任何想法吗?

编辑:

下面的代码在后台线程中运行(忽略难看的代码,因为这只是为了演示问题):在SomeWizardPage构造器中,我创建了BitmapImage类的一个新实例,并将其设置为绑定到UI的属性-这就是导致失败的原因。当我注释掉构造函数中image属性的初始化时,异常不会被抛出。

Main.CurrentViewModel = new SomeWizardPage();
if (Main.MainWindow.Dispatcher.CheckAccess())
{
}
else
{
    Main.MainWindow.Dispatcher.Invoke(DispatcherPriority.Render, new Action(() =>
    {
        Main.MainWindow.Hide();
    }));
}
有人能解释一下这种行为吗?我怎么解决这个问题?

BitmapImageDependencyObject。你不能从后台线程实例化它。

https://msdn.microsoft.com/en-us/library/system.windows.media.imaging.bitmapimage%28v=vs.110%29.aspx

如果您遵循MVVM,您也不需要这样做。BitmapImage属于视图。

最新更新