主表格在长时间运行过程中在不同的线程中挂起。

时间:2013-05-20 07:30:47

标签: c# multithreading

我在Windows窗体应用程序中使用线程。

代码

Thread sqlProcessThread = new Thread(new ThreadStart(doSqlWork));
sqlProcessThread.IsBackground = true;  
sqlProcessThread.Start();

当时从我的表单调用此线程时,表单挂起。 如何在不使用后台工作器的情况下解决这个问题。

2 个答案:

答案 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()将立即返回调用它的后台线程,以防止死锁。

必须谨慎使用。