代码之家  ›  专栏  ›  技术社区  ›  Robert Davis

Process.HasExited可以引发InvalidOperationException的原因是什么?

  •  4
  • Robert Davis  · 技术社区  · 15 年前

    我看到一个 System.Diagnositics.Process.HasExited 方法引发InvalidOperationException,但对于引发该异常的原因,MessageText属性并不十分有用。在什么情况下会引发这个异常?

    5 回复  |  直到 9 年前
        1
  •  2
  •   Brandi    15 年前

    如果上述两个答案考虑到进程的实例成员不是线程安全的,那么这可能是下一个开始查找的地方。

        2
  •  7
  •   lmat - Reinstate Monica    10 年前

    我看到了同样的信息。如果你这样做,就会发生:

    System.Diagnostics.Process proc = new System.Diagnostics.Process();
    proc.StartInfo.FileName = "trash filename here.exe";
    try
    {
        proc.Start();
    }
    catch { }//proc should fail.
    try
    {
        if (proc.HasExited)
        {
            //....
        }
    }
    catch (System.InvalidOperationException e)
    {
        //cry and weep about it here.
    }
    

    如果 proc.Start() 失败以上,你应该得到哭和哭泣部分,也。所以,如果你追上 启动() 一定要抓住 proc.HasExited (还有许多其他的 System.Diagnostics.Process 方法。

        3
  •  5
  •   Daniel A.A. Pelsmaeker    15 年前

    正如奥巴利克斯所说,一个 InvalidOperationException 当没有进程附加到 Process 对象。当进程退出并且 Close Dispose 已被呼叫 过程 对象。 关闭 从内存中释放与进程相关的所有资源。呼叫前 关闭 ,此数据保存在内存中,以向您(程序员)提供有关退出进程的信息,例如 ExitTime ExitCode .

        4
  •  3
  •   Community CDub    7 年前

    这个 documentation 声明在没有与对象关联的进程中引发InvalidOperation异常。

    您是否已经开始使用 Process.Start() 或者在访问 HasExited 财产?

    这个 post 同样的问题也要处理。

        5
  •  1
  •   SuperBiasedMan Jayesh Kalkani    9 年前

    不要打电话 Terminate.Close() ,呼叫 Terminate.CloseMainWindoe() 相反。

    然后您可以发出定时等待,检查 HasExited 然后打电话 Kill() 如果需要的话。