我有一个“userdetails”类,该类有一个名为“detailschanged”的事件。每当用户详细信息更改时,它将被引发。
当我以新形式创建“userdetails”(objUserDetails)的新对象时,我将订阅事件“detailschanged”以指示用户有关数据更改。
objUserDetails.detailschanged += InformtoUser
InformtoUser是一种新形式的方法。在InformtoUser方法中,我正在访问表单的控件(例如标签的text属性)。
访问该控件时,出现“跨线程操作”错误。
如何避免这种跨线程操作?
最佳答案
UI控件只能从UI线程更新。
如果使用WinForms,则应该执行以下操作:
mycontrol.Invoke((MethodInvoker)(() =>
{
mycontrol.Text="some text";
}));
如果您在WPF中,则应该使用调度程序:
myControl.Dispatcher.BeginInvoke(DispatcherPriority.Background, new Action(() => myControl.Text = ""));