1

我试图弄清楚为什么我的表单在执行某些代码时会冻结。我也无法最小化或移动表单。是因为WaitForExit在过程中被使用了吗?

下面的代码与按钮单击相关联。

If Checkbox1.checked = True Then
   Call Test()
End If

If Checkbox2.checked = True Then
   Goto NextStep
Else
   Goto StopProcessing
End If

这是我正在调用的测试潜艇。使用可选参数调用 exe。

        Using psinfo As New Process
            psinfo.StartInfo.FileName = "C:\Temp\Test.exe "
            psinfo.StartInfo.Arguments = Arg1
            psinfo.StartInfo.WindowStyle = ProcessWindowStyle.Hidden
            psinfo.Start()
            psinfo.WaitForExit()
        End Using

WaitForExit添加了(所以我认为)在处理完成之前不处理下一个语句(下一个语句是 Checkbox2 的 If 语句)。不是这样吗?

4

1 回答 1

2

添加了 WaitForExit (所以我认为)在处理完成之前不处理下一条语句(下一条语句是 Checkbox2 的 If 语句)。

当您调用WaitForExit时,它将阻塞,直到进程 ( Test.exe) 完成。

由于您在用户界面线程上运行它,它会导致您的表单“冻结”,直到该过程完全完成。

如果您不希望发生这种情况,则需要在后台线程上等待。您可能会将此代码移动到 aBackgroundWorker并使用它与您的主窗口同步 - 但您将需要处理“等待”以使进程以不同的方式完成(即:预先禁用您的 UI,运行该进程,完成后重新启用)。

请注意,对于 Process 类,另一种选择是添加EnableRaisingEvents进程,然后将处理程序添加到Process.Exited。这将让您不会WaitForExit(),而是在流程完成时通过事件获得通知。

于 2012-10-16T17:48:24.163 回答