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

C# 从WPF应用程序调用Dispatcher时失败,c#,wpf,mvvm,C#,Wpf,Mvvm,我有一个WPF MVVM应用程序,它在不同的线程上运行一些逻辑,然后当我要执行UI更新时,隐藏主窗口,我调用Dispatcher.BeginInvoke方法,并得到以下错误: 必须在与DependencyObject相同的线程上创建DependencySource 有什么想法吗 编辑: 以下代码在后台线程上运行忽略丑陋的代码,因为这只是为了演示问题: 在SomeWizardPage构造函数中,我正在创建BitmapImage类的新实例,并将其设置为绑定到UI的属性-这就是导致失败的原因。当我从构

我有一个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();
    }));
}
有人能解释这种行为吗?如何解决此问题?

BitmapImage是一个DependencyObject。不能从后台线程实例化它


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

您的窗口是否运行在不同的线程上,即不同的调度程序上?@Dikla您需要显示导致异常的代码我在我的问题中添加了其他信息-请查看。谢谢CurrentViewModel是DependencyProperty吗?-1我正在创建一个新的BitmapImage,并将其设置为绑定到UI的属性,而您在代码中根本不显示该属性。谢谢!我有一个逻辑,根据当前状态确定视图中将显示哪个图像。此逻辑位于视图模型中。那么,在这种情况下,如何将位图图像放置在具有MVVM的视图中?@Dikla位图图像应始终位于视图中,无异常。它是一个UI元素。它应该绑定到ViewModel。做将绑定绑定到ViewModel。我已尝试按照您的建议将Uri源绑定到视图模型中Uri类型的属性,但在运行时不会显示图像。有什么想法吗?@Dikla在Visual Studio中启用WPF绑定错误并查看输出窗口@SergeyBrunov你的编辑没有改进我的答案。首先,你的语法错了。在描述BitmapImage类和DependencyObject类的专有名词时,没有文章。你删除了我的推荐信。而且你完全改变了最后一句话的意图。