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是有意义的。如果你想一次运行一个,那么一个就更有意义了。好的,谢谢。我想我已经掌握了我需要的方法。再次感谢!