我正在试图解释为什么我的表单在执行某些代码时会冻结。我也不能最小化或移动表格。是因为在此过程中使用了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语句)。情况不是这样吗?
答案 0 :(得分:2)
添加了WaitForExit(所以我认为)在处理完成之前不处理下一个语句(下一个语句是Checkbox2的If语句)。
当您致电WaitForExit
时,它会一直阻止,直到流程(Test.exe
)完成。
由于您在用户界面线程上运行此操作,因此它将导致您的表单“冻结”,直到该过程完全完成。
如果您不需要这样做,则需要在后台线程上等待。您可以将此代码移动到BackgroundWorker
并使用它与主窗口同步 - 但是您需要处理“等待”该过程以不同方式完成(即:禁用您的UI前面,运行过程,完成后重新启用。)
请注意,使用Process类,另一种方法是在进程上添加EnableRaisingEvents
,然后向Process.Exited添加处理程序。这样您就不会WaitForExit()
,而是在流程完成时通过事件得到通知。