代码之家  ›  专栏  ›  技术社区  ›  Sebastian Gray

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

  •  16
  • Sebastian Gray  · 技术社区  · 15 年前

    我尝试过使用来自msdn的示例来解决这个问题,但它们似乎只适用于Windows窗体。例如,使用.invokeRequired的方法依赖于Windows窗体控件,但是此方法不适用于WPF控件。backgound worker方法抛出 InvalidOperationException 同样-

    调用线程无法访问此 对象,因为其他线程拥有 它。

    那么,如何在WPF环境中实现这一点呢?

    1 回复  |  直到 15 年前
        1
  •  40
  •   Noldorin    15 年前

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

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

    示例用法可能如下(在 Window / UserControl ):

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