如何确定进程对象是否正在运行

时间:2011-06-30 09:27:19

标签: c# process system.diagnostics

虽然googlin我只有信息如何获取所有进程,但存储到Process[],但我需要的是:

Process proc = new Process();
proc.startInfo.FileName = "notepad.exe";
proc.Start();

下面我创建了一个进程对象,现在我需要知道这个进程是否已关闭,正好是这个,因为如果用户关闭,如果我尝试使用代码proc.Exit();,则抛出异常。

到目前为止,我正在做:

    Process procs = new Process();
    Process[] proc = Process.GetProcesses();
    foreach (Process p in proc)
    {
        if (p.Id = procs.Id)
        { 
            //Do Something
            break;
        }
    }

2 个答案:

答案 0 :(得分:4)

只需在Process对象上使用HasExited

Process proc = new Process();
proc.startInfo.FileName = "notepad.exe";
proc.Start();

// do something

if(proc.HasExited)
    // notepad was closed

或者,如果您希望在流程结束后立即收到通知,请使用Exited事件:

Process proc = new Process();
proc.startInfo.FileName = "notepad.exe";
proc.Exited += ProcessExited;
proc.Start();

private void ProcessExited(object sender, EventArgs e)
{
    // notepad was closed
}

答案 1 :(得分:2)

添加以下行:

proc.Exited += new EventHandler(proc_Exited);

然后这样的方法:

void proc_Exited(object sender, EventArgs e)
{
    //process has ended..
}

你可以拥有自己的全局旗帜,并在处理程序中提升它或“实时”处理它取决于你的最终目标。