C# 尝试从另一个类更新wpf gui元素

C# 尝试从另一个类更新wpf gui元素,c#,wpf,user-interface,thread-safety,invoke,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.Messa

您好,我正在尝试从另一个类更新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的标签)?

错误消息会准确地告诉您出了什么问题:您需要使用正在更新的UI元素的dispatcher

这不依赖于类,而是依赖于当前线程

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

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

另请参见

错误消息准确地告诉您错误所在:您需要使用正在更新的UI元素的dispatcher

这不依赖于类,而是依赖于当前线程

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

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

另请参见

这不起作用,仍然会给我同样的错误。这就是我试图实现您的建议的方式:((MainWindow)System.Windows.Application.Current.MainWindow).lblError.Dispatcher.Invoke(新操作(()=>{((MainWindow)System.Windows.Application.Current.MainWindow).lblError.Content=exception.Message;});确保使用标签的调度程序。如果失败,记录执行标签修改代码的线程的名称。这不起作用,仍然会给我相同的错误。这就是我试图实现您的建议的方式:((MainWindow)System.Windows.Application.Current.MainWindow).lblError.Dispatcher.Invoke(新操作(()=>{((MainWindow)System.Windows.Application.Current.MainWindow).lblError.Content=exception.Message;});确保使用标签的调度程序。如果失败,则记录执行标签修改代码的线程的名称。