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

时间:2012-10-16 17:43:59

标签: vb.net visual-studio-2010 process waitforexit

我正在试图解释为什么我的表单在执行某些代码时会冻结。我也不能最小化或移动表格。是因为在此过程中使用了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语句)。情况不是这样吗?

1 个答案:

答案 0 :(得分:2)

  

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

当您致电WaitForExit时,它会一直阻止,直到流程(Test.exe)完成。

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

如果您不需要这样做,则需要在后台线程上等待。您可以将此代码移动到BackgroundWorker并使用它与主窗口同步 - 但是您需要处理“等待”该过程以不同方式完成(即:禁用您的UI前面,运行过程,完成后重新启用。)

请注意,使用Process类,另一种方法是在进程上添加EnableRaisingEvents,然后向Process.Exited添加处理程序。这样您就不会WaitForExit(),而是在流程完成时通过事件得到通知。