我尝试过使用MSDN中的示例,但它们似乎只适用于Windows窗体。例如,使用.InvokeRequired的方法依赖于窗体控件,但是此方法不适用于WPF控件。 Backgound工作方法也会抛出InvalidOperationException
-
调用线程无法访问它 对象,因为不同的线程拥有 它
那么如何在WPF环境中完成呢?
答案 0 :(得分:41)
您只想使用Dispatcher.Invoke
方法(或异步等效Dispatcher.BeginInvoke
),它将封送对主WPF UI线程的调用。
DependencyObject
类包含Dispatcher
属性,这意味着从此类继承的所有控件和其他对象也以类似于WinForms的方式提供此属性。此外,Application
对象提供对调度程序的访问。
示例用法可能如下(在Window
/ UserControl
的代码隐藏中):
this.Dispatcher.Invoke((Action)(() =>
{
...
}));