System.Diagnostics.Process.HasExited
メソッドがスローするのを見てInvalidOperationException
いますが、メッセージテキストプロパティは、なぜスローされたのかについてはそれほど有用ではありません。この例外はどのような条件下でスローされますか?
5 に答える
同じメッセージが表示されます。これを行うと発生する可能性があります。
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
メソッド)でキャッチしてください。
Obalixが正しく述べているInvalidOperationException
ように、オブジェクトにプロセスがアタッチされていない場合は、がスローされProcess
ます。これは、プロセスが終了したとき、Close
またはオブジェクトDispose
で呼び出されたときに発生しProcess
ます。Close
プロセスに関連するすべてのリソースをメモリから解放します。を呼び出す前Close
に、このデータはメモリに保持され、終了したプロセスについて知りたい情報(およびなど)をユーザー(プログラマー)に提供しExitTime
ますExitCode
。
上記の2つの答えが、プロセスのインスタンスメンバーがスレッドセーフではないことを念頭に置いている場合は、それが次に探し始める場所になる可能性があります。
電話しないでTerminate.Close()
、Terminate.CloseMainWindoe()
代わりに電話してください。
その後、時間指定の待機を発行し、確認して、必要に応じHasExited
て電話をかけることがKill()
できます。