如何以线程安全的方式访问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)(() => { ... }));