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

本文关键字:是否 运行 对象 何确定 程对象 | 更新日期: 2023-09-27 18:00:58

虽然谷歌我只有如何获取所有进程的信息,存储到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;
        }
    }

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

只需在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
}

添加此行:

proc.Exited += new EventHandler(proc_Exited);

那么这样的方法:

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

您可以拥有自己的全局标志,并在处理程序中提升它,或者"实时"处理它,这取决于您的最终目标是什么。