Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vb.net 什么会导致表单在执行代码时冻结_Vb.net_Visual Studio 2010_Process_Waitforexit - Fatal编程技术网

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

Vb.net 什么会导致表单在执行代码时冻结,vb.net,visual-studio-2010,process,waitforexit,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

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

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

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

由于您是在用户界面线程上运行此操作,它将导致窗体“冻结”,直到进程完全完成

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


请注意,对于Process类,另一种替代方法是在流程上添加
EnableRaisingEvents
,然后向添加处理程序。这不会让您
WaitForExit()
,而是在流程完成时通过事件得到通知。

我不太清楚您在问什么,但是的,WaitForExit()会在流程退出之前停止执行。我感觉就是这样。好的,好的,谢谢,回到绘图板上。谢谢你的输入。通过使用
WaitForExit
我有一种感觉,它反过来又锁定了接口。我会看看你的建议,再次感谢。一个简单的问题,有多个后台工作人员有意义吗?IE对于我的每个过程?@Muhnamana取决于你在做什么,事件方法可能更好。如果要同时运行这些进程,则>1 BW是有意义的。如果你想一次运行一个,那么一个就更有意义了。好的,谢谢。我想我已经掌握了我需要的方法。再次感谢!