试图从另一个类更新wpf gui元素

时间:2016-02-15 11:50:45

标签: c# wpf user-interface thread-safety invoke

您好我正在尝试从另一个类更新我的WPF GUI中的标签,这个类不是使用此代码的GUI:

 System.Windows.Threading.Dispatcher.CurrentDispatcher.Invoke(new Action(() => 
     {
         ((MainWindow)System.Windows.Application.Current.MainWindow)
             .lblError.Content = exception.Message; 
     }));

但有时会出现以下异常并且更新无效:

  

抛出异常:' System.InvalidOperationException'在   WindowsBase.dll("调用线程无法访问此对象   因为该对象归另一个线程所有。")

为什么我的代表不工作?有没有一种简单的方法可以做我想做的事情(从另一个类更新我的GUI标签)而不需要太多努力?

1 个答案:

答案 0 :(得分:2)

错误消息告诉您确切的错误:您需要使用要更新的UI元素的调度程序。

这不依赖于类,它依赖于当前线程。

要访问正确的线程,请使用您尝试更新的元素的Dispatcher属性:

lblError.Dispatcher.Invoke(new Action(() ...

另见How to update the GUI from another thread in C#?