C# 尝试从另一个类更新wpf gui元素
您好,我正在尝试从另一个类更新WPF GUI中的标签,该类不是包含以下代码的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
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;});确保使用标签的调度程序。如果失败,则记录执行标签修改代码的线程的名称。