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

时间:2015-05-24 19:27:22

标签: c# wpf mvvm

我有一个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();
    }));
}

有人可以解释这种行为吗?我该如何解决这个问题?

1 个答案:

答案 0 :(得分:3)

BitmapImageDependencyObject。您无法从后台线程实例化它。

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

如果您关注MVVM,也不需要。 BitmapImage属于视图。