2012-10-16 50 views
1

我想弄清楚,为什么我的形式执行一些代码的时候死机。我也不能最小化或移动表单。是否因为在过程中使用了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如果语句),直到处理完成。这不是这种情况吗?

+1

我不是你的要求很清楚,但肯定的,WaitForExit()将停止你的执行冷,直到进程退出。 –

+0

我有这样的感觉。好吧,非常感谢,回到了我的绘图板。 – Muhnamana

回答

2

加入的WaitForExit(所以我想)不处理下一条语句(下面的语句是为Checkbox2如果语句),直到处理完成。

当你调用WaitForExit,它会阻止,直到该进程(Test.exe)完成。

既然你的用户界面线程运行此,它会导致你的方式来“冻结”,直到该进程全部完成。

如果您需要这不会发生,你将需要等待在后台线程。你可以,可能,请将此代码放到一个BackgroundWorker,并用它来与你的主窗口同步 - 但你将需要处理“等待”的过程中,以不同的方式完成(即:前面禁用您的UI,运行过程,完成时重新启用)。

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

+0

感谢您的输入。我有一种使用'WaitForExit'的感觉,它反过来锁定了界面。我会看看你的建议,再次感谢。 – Muhnamana

+0

一个简单的问题,有多个背景工作者是否有意义? IE的每个进程我有? – Muhnamana

+2

@Muhnamana根据你在做什么,事件方法可能会更好。如果你打算同时运行这些流程,那么> 1 BW是有意义的。如果你想一次运行一个,那么一个更合理。 –

相关问题