我在Windows窗体应用程序中使用线程。
Thread sqlProcessThread = new Thread(new ThreadStart(doSqlWork));
sqlProcessThread.IsBackground = true;
sqlProcessThread.Start();
当时从我的表单调用此线程时,表单挂起。 如何在不使用后台工作器的情况下解决这个问题。
答案 0 :(得分:0)
您可以使用属性InvokeRequired来检查来自不同线程的UI访问。
if (this.InvokeRequired)
{
this.Invoke(new MethodInvoker(this.updateUI));
return;
}
更多信息:MSDN documentation
答案 1 :(得分:0)
如果您使用后台线程中的Invoke()
,则会在继续之前等待UI响应。
UI可以通过等待需要后台线程进行进一步处理的内容来响应Invoke()
调用。如果发生这种情况,你会陷入僵局。
如果不需要来自UI调用的返回值,您通常可以使用BeginInvoke()
代替Invoke()
来解决此问题。
调用BeginInvoke()
将立即返回调用它的后台线程,以防止死锁。
必须谨慎使用。