每当我刷新标签时,都会收到此错误:调用线程无法访问该对象,因为另一个线程拥有它。我尝试调用但失败了。我正在使用 WPF 表单。
delegate void lostfocs(string st);
private void imgPayment_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
Thread t = new Thread(modi);
t.Start();
}
void modi()
{
try
{
label1.Content = "df";
}
catch
{
lostfocs ld = new lostfocs(up);
// ld.Invoke("df");
object obj=new object();
ld.Invoke("sdaf");
}
}
void up(string st)
{
label1.Content = st;
}
Use 调度程序.调用方法。
在线程上同步执行指定的委托
与调度程序关联。
Also
在 WPF 中,只有创建 DispatcherObject 的线程才可以访问
那个物体。例如,一个脱离的后台线程
主 UI 线程无法更新按钮的内容
在 UI 线程上创建。为了让后台线程
访问 Button 的 Content 属性,后台线程必须
将工作委托给与 UI 线程关联的 Dispatcher。
这是通过使用 Invoke 或 BeginInvoke 来完成的。调用的是
同步而 BeginInvoke 是异步的。该操作被添加到
指定 DispatcherPriority 的 Dispatcher 的事件队列。
您收到错误是因为您的标签是在 UI 线程上创建的,并且您试图通过另一个线程修改其内容。这是您需要 Dispatcher.Invoke 的地方。
看看这篇文章WPF 线程使用调度程序构建响应速度更快的应用程序
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)