c# - 如何确定进程对象正在运行

标签 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;
        }
    }

最佳答案

只需使用 HasExited在您的 Process 对象上:

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
}

关于c# - 如何确定进程对象正在运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6532698/

相关文章:

c# - 在 C# 中实现回调

c# - 从禁用的文本框复制到剪贴板

c - 一旦可用就读取子进程的输出?

c# - 如何保留 msbuild 输出的颜色?

c# - 无法设置 Process.StartInfo.WorkingDirectory 以从 c# 调用 exe

c# - 无法将值 null 插入列 ... 当值不为 null 时

c# - 如何从 XML 文件中获取属性?

c++ - 执行命令并获得输出 : popen and pclose undefined

linux - nohup 是如何工作的?

c# - 在我的 C# Win 应用程序中打开 Windows 的计算器?