C#中的process.start,如何知道进程何时结束?

33
在C#中,我可以使用以下代码启动一个进程:

process.start(program.exe);

如何判断该程序当前是否正在运行或已经关闭?
5个回答

73

MSDN System.Diagnostics.Process

若要立即了解,可以检查HasExited属性。

var isRunning = !process.HasExited;

如果这是一个快速的过程,只需等待即可。

process.WaitForExit();

如果你要在后台启动一个进程,那么需要在设置 EnableRaisingEvents 为 true 后订阅 Exited 事件。

process.EnableRaisingEvents = true;
process.Exited += (sender, e) => {  /* do whatever */ };

这种方法不适用于ASP.NET,不是真正的异步运行。我的Web应用程序在处理过程中被阻塞了。有什么想法吗? - Siyon DP

18
Process p = new Process();
p.Exited += new EventHandler(p_Exited);
p.StartInfo.FileName = @"path to file";
p.EnableRaisingEvents = true;
p.Start();

void p_Exited(object sender, EventArgs e)
{
    MessageBox.Show("Process exited");
}

3

如果使用静态的Process.Start()调用(或使用new创建实例),请确保保存Process对象,然后根据需要检查HasExited属性或订阅Exited事件。


你可以使用 Process.Start(string) 方法,因为它返回一个 Process 实例。你可以使用该实例的 Exited 事件。 - Mike Mayer
@MikeMayer 挺有道理的,我总是忘记它是这样工作的。我会进行编辑。 - Andrew Barber

1

Exited事件分配一个事件处理程序。

MSDN链接中有示例代码,我不会在这里重复它。


1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接