6

System.Diagnostics.Process.HasExitedメソッドがスローするのを見てInvalidOperationExceptionいますが、メッセージテキストプロパティは、なぜスローされたのかについてはそれほど有用ではありません。この例外はどのような条件下でスローされますか?

4

5 に答える 5

7

同じメッセージが表示されます。これを行うと発生する可能性があります。

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.Start()必ずproc.HasExited(および他の多くのSystem.Diagnostics.Processメソッド)でキャッチしてください。

于 2010-09-27T20:09:25.303 に答える
5

Obalixが正しく述べているInvalidOperationExceptionように、オブジェクトにプロセスがアタッチされていない場合は、がスローされProcessます。これは、プロセスが終了したとき、CloseまたはオブジェクトDisposeで呼び出されたときに発生しProcessます。Closeプロセスに関連するすべてのリソースをメモリから解放します。を呼び出す前Closeに、このデータはメモリに保持され、終了したプロセスについて知りたい情報(およびなど)をユーザー(プログラマー)に提供しExitTimeますExitCode

于 2010-04-08T20:45:27.920 に答える
3

ドキュメントには、オブジェクトに関連付けられているプロセスがない場合にInvalidOperation例外がスローされると記載されています。

を使用してプロセスをすでに開始しましたか、またはプロパティProcess.Start()にアクセスする前にプロセスを破棄しましたか?HasExited

この投稿も同じ問題を扱っています。

于 2010-04-08T20:43:57.453 に答える
2

上記の2つの答えが、プロセスのインスタンスメンバーがスレッドセーフではないことを念頭に置いている場合は、それが次に探し始める場所になる可能性があります。

于 2010-04-08T22:16:47.403 に答える
1

電話しないでTerminate.Close()Terminate.CloseMainWindoe()代わりに電話してください。

その後、時間指定の待機を発行し、確認して、必要に応じHasExitedて電話をかけることがKill()できます。

于 2015-11-17T10:11:14.717 に答える