[英]Where to put try-catch when calling Application.Current.Dispatcher.Invoke in WPF application
[英]Failure when calling Dispatcher from WPF application
我有一個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
。 您不能從后台線程實例化它。
https://msdn.microsoft.com/zh-CN/library/system.windows.media.imaging.bitmapimage%28v=vs.110%29.aspx
如果您正在關注MVVM,則也不需要。 BitmapImage
屬於視圖。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.