Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/14.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 process.start冻结我的申请(VS 2013)_Vb.net_Process_Waitforexit - Fatal编程技术网

Vb.net process.start冻结我的申请(VS 2013)

Vb.net process.start冻结我的申请(VS 2013),vb.net,process,waitforexit,Vb.net,Process,Waitforexit,所以我试图制作一个应用程序,启动第三方exe来执行一些文件操作, 基于文件名列表。 因此,如果列表中有13个项目,我将循环13次,每次启动外部进程,通知用户当前正在处理哪个文件,启动进程并等待它退出。要通知用户,另一个列表框用作shoutbox。问题是,.waitforexit()以一种奇怪的方式冻结了整个线程,因此外部程序被称为nmormaly,即文件被正常处理,但主窗口被冻结,直到所有项目都完成。所以基本上,Shoutbox是冻结的,只有在整个循环完成后,才会被垃圾发送所有信息。我尝试了很多

所以我试图制作一个应用程序,启动第三方exe来执行一些文件操作, 基于文件名列表。 因此,如果列表中有13个项目,我将循环13次,每次启动外部进程,通知用户当前正在处理哪个文件,启动进程并等待它退出。要通知用户,另一个列表框用作shoutbox。问题是,.waitforexit()以一种奇怪的方式冻结了整个线程,因此外部程序被称为nmormaly,即文件被正常处理,但主窗口被冻结,直到所有项目都完成。所以基本上,Shoutbox是冻结的,只有在整个循环完成后,才会被垃圾发送所有信息。我尝试了很多方法来实现这一点,比如启动新线程、使用线程池、计时器等等。感谢您的帮助。 代码:

问题是您(至少在您发布的代码中)正在UI线程上调用
WaitForExit()
。UI线程负责重新绘制窗口,因此,如果您通过调用
WaitForExit()
来阻止它,则它不会重新绘制UI,并且应用程序似乎被冻结

您需要在另一个线程或线程池中调用它,我建议使用:

但是,由于您没有对<代码>进程.Stistar()/Cudio>调用进行任何处理,您也可以考虑不调用<代码> WaIfFExeTo()/<代码>。< /P> 由于您使用的是VS2013,因此还可以使用等待流程完成:

await Task.Run( Sub()
  Dim p As Process = Process.Start(pInfo)
  p.WaitForExit()
End Sub)
请注意,您还必须将
async
关键字添加到周围的方法中

问题在于您(至少在您发布的代码中)正在UI线程上调用
WaitForExit()
。UI线程负责重新绘制窗口,因此,如果您通过调用
WaitForExit()
来阻止它,则它不会重新绘制UI,并且应用程序似乎被冻结

您需要在另一个线程或线程池中调用它,我建议使用:

但是,由于您没有对<代码>进程.Stistar()/Cudio>调用进行任何处理,您也可以考虑不调用<代码> WaIfFExeTo()/<代码>。< /P> 由于您使用的是VS2013,因此还可以使用等待流程完成:

await Task.Run( Sub()
  Dim p As Process = Process.Start(pInfo)
  p.WaitForExit()
End Sub)
请注意,您还必须将
async
关键字添加到周围的方法中

问题在于您(至少在您发布的代码中)正在UI线程上调用
WaitForExit()
。UI线程负责重新绘制窗口,因此,如果您通过调用
WaitForExit()
来阻止它,则它不会重新绘制UI,并且应用程序似乎被冻结

您需要在另一个线程或线程池中调用它,我建议使用:

但是,由于您没有对<代码>进程.Stistar()/Cudio>调用进行任何处理,您也可以考虑不调用<代码> WaIfFExeTo()/<代码>。< /P> 由于您使用的是VS2013,因此还可以使用等待流程完成:

await Task.Run( Sub()
  Dim p As Process = Process.Start(pInfo)
  p.WaitForExit()
End Sub)
请注意,您还必须将
async
关键字添加到周围的方法中

问题在于您(至少在您发布的代码中)正在UI线程上调用
WaitForExit()
。UI线程负责重新绘制窗口,因此,如果您通过调用
WaitForExit()
来阻止它,则它不会重新绘制UI,并且应用程序似乎被冻结

您需要在另一个线程或线程池中调用它,我建议使用:

但是,由于您没有对<代码>进程.Stistar()/Cudio>调用进行任何处理,您也可以考虑不调用<代码> WaIfFExeTo()/<代码>。< /P> 由于您使用的是VS2013,因此还可以使用等待流程完成:

await Task.Run( Sub()
  Dim p As Process = Process.Start(pInfo)
  p.WaitForExit()
End Sub)

请注意,还必须将
async
关键字添加到周围的方法中

WaitForExit
阻塞线程。但是在进程之后/之前,您可以添加
Application.DoEvents()
,以便主线程处理其事件。如果一旦启动Application.DoEvents路径,它将永远主宰您的命运,消耗您的时间……因为我忘了提到这是WPF Application.DoEvents()至少在该语法下是不可能的。
WaitForExit
阻塞线程。但是在进程之后/之前,您可以添加
Application.DoEvents()
,以便主线程处理其事件。如果一旦启动Application.DoEvents路径,它将永远主宰您的命运,消耗您的时间……因为我忘了提到这是WPF Application.DoEvents()至少在该语法下是不可能的。
WaitForExit
阻塞线程。但是在进程之后/之前,您可以添加
Application.DoEvents()
,以便主线程处理其事件。如果一旦启动Application.DoEvents路径,它将永远主宰您的命运,消耗您的时间……因为我忘了提到这是WPF Application.DoEvents()至少在该语法下是不可能的。
WaitForExit
阻塞线程。但是在进程之后/之前,您可以添加
Application.DoEvents()
,以便主线程处理其事件。如果一旦启动Application.DoEvents路径,它将永远主宰您的命运,消耗您的时间……因为我忘了提到这是WPF Application.DoEvents()至少在这种语法下是不可能的..等待方法实际上解决了这个问题!!!我必须将Async添加到按钮点击处理程序中,并添加您发布的等待代码,以达到预期效果。谢谢。太好了:)我应该提到,我会编辑回复以备将来参考。等待方法实际上解决了问题!!!我必须将Async添加到按钮点击处理程序中,并添加您发布的等待代码,以达到预期效果。谢谢。太好了:)我应该提到t