如何以线程安全的方式访问c#WPF控件?

我尝试过使用MSDN中的示例,但它们似乎只适用于Windows窗体。 例如,使用.InvokeRequired的方法依赖于窗体控件,但是此方法不适用于WPF控件。 Backgound工作器方法也会抛出InvalidOperationException

调用线程无法访问此对象,因为另一个线程拥有它。

那么如何在WPF环境中完成呢?

您只想使用Dispatcher.Invoke方法(或异步等效的Dispatcher.BeginInvoke ),它将封送对主WPF UI线程的调用。

DependencyObject类包含Dispatcher属性,这意味着从此类inheritance的所有控件和其他对象也以类似于WinForms的方式提供此属性。 此外, Application对象提供对调度Application访问。

示例用法可能如下(在Window / UserControl代码隐藏中):

 this.Dispatcher.Invoke((Action)(() => { ... }));