Answers:
使用Process.WaitForExit
?还是Process.Exited
如果不想阻止就订阅该活动?如果这样做不能满足您的要求,请给我们提供有关您的要求的更多信息。
WaitForExit
首先提到的原因……在某些情况下,您可能希望在完成某些操作后执行更多代码,但这并不意味着您需要阻塞当前线程。
Process.Exited
事件,我相信您必须预先设置Process.EnableRaisingEvents
为true 来配置该过程。但是,考虑到这个问题已经存在了三年以上,因此在提出该问题时可能Process.EnableRaisingEvents
还不是一件事情。
Process.Exited
事件的名称。谢谢!+1为完整性
我在我的应用程序中执行以下操作:
Process process = new Process();
process.StartInfo.FileName = executable;
process.StartInfo.Arguments = arguments;
process.StartInfo.ErrorDialog = true;
process.StartInfo.WindowStyle = ProcessWindowStyle.Minimized;
process.Start();
process.WaitForExit(1000 * 60 * 5); // Wait up to five minutes.
那里还有一些其他有用的功能...
我想,Process.WaitForExit应该就是您想要的东西。
请参考Microsoft的示例:[ https://docs.microsoft.com/zh-CN/dotnet/api/system.diagnostics.process.enableraisingevents?view=netframework-4.8]
最好是设置:
myProcess.EnableRaisingEvents = true;
否则该代码将被阻止。也不需要其他属性。
// Start a process and raise an event when done.
myProcess.StartInfo.FileName = fileName;
// Allows to raise event when the process is finished
myProcess.EnableRaisingEvents = true;
// Eventhandler wich fires when exited
myProcess.Exited += new EventHandler(myProcess_Exited);
// Starts the process
myProcess.Start();
// Handle Exited event and display process information.
private void myProcess_Exited(object sender, System.EventArgs e)
{
Console.WriteLine(
$"Exit time : {myProcess.ExitTime}\n" +
$"Exit code : {myProcess.ExitCode}\n" +
$"Elapsed time : {elapsedTime}");
}
就像Jon Skeet所说的那样,请使用Process.Exited
:
proc.StartInfo.FileName = exportPath + @"\" + fileExe;
proc.Exited += new EventHandler(myProcess_Exited);
proc.Start();
inProcess = true;
while (inProcess)
{
proc.Refresh();
System.Threading.Thread.Sleep(10);
if (proc.HasExited)
{
inProcess = false;
}
}
private void myProcess_Exited(object sender, System.EventArgs e)
{
inProcess = false;
Console.WriteLine("Exit time: {0}\r\n" +
"Exit code: {1}\r\n", proc.ExitTime, proc.ExitCode);
}
试试这个:
string command = "...";
var process = Process.Start(command);
process.WaitForExit();