-1

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

代码

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

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

4

2 回答 2

0

您可以使用属性 InvokeRequired 来检查来自不同线程的 UI 访问。

        if (this.InvokeRequired)
        {
            this.Invoke(new MethodInvoker(this.updateUI));
            return;
        }

更多信息:MSDN 文档

于 2013-05-20T08:41:51.717 回答
0

如果您Invoke()从后台线程使用,它将等待 UI 响应,然后再继续。

Invoke()UI 可以通过等待需要后台线程进行进一步处理的东西来响应调用。如果发生这种情况,你就会陷入僵局。

如果您不需要UI调用的返回值,您通常可以通过使用BeginInvoke()而不是Invoke().

调用BeginInvoke()将立即返回调用它的后台线程,防止死锁。

这必须小心使用。

于 2013-05-20T08:43:56.033 回答