什么会导致表单在执行代码时冻结



我试图弄清楚为什么我的表单在执行某些代码时会冻结。我也无法最小化或移动表单。是因为在这个过程中使用了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:TempTest.exe "
psinfo.StartInfo.Arguments = Arg1
psinfo.StartInfo.WindowStyle = ProcessWindowStyle.Hidden
psinfo.Start()
psinfo.WaitForExit()
End Using

添加WaitForExit(所以我认为)是为了在处理完成之前不处理下一个语句(下一条语句是Checkbox2的If语句)。事实并非如此吗?

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

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

由于您在用户界面线程上运行此操作,它将导致表单"冻结",直到进程完全完成。

如果您需要不发生这种情况,则需要在后台线程上等待。您可能会将此代码移动到BackgroundWorker中,并使用它与主窗口同步,但您需要处理"等待"过程以不同的方式完成(即:提前禁用UI,运行过程,完成后重新启用)。

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

最新更新