9

私は最近、次の効果のある製品コードを見てきました。

if (Process.GetCurrentProcess().HasExited)
{
    // do something
}

これは意味がありますか?直観的には、プロセスが終了した場合、プロセス内でコードを実行することはできません。

そうでない場合、現在のプロセスが終了しているかどうかを判断する良い方法は何でしょうか?

関連する可能性がある場合、これの使用例は、プロセスが強制終了されているときにオブジェクトが破棄されないなどのアサーションのポップを回避することでした。

4

3 に答える 3

3

そのソース コードを確認すると、IsExited目を見張るようなことが何も起こっていないことがわかります。IsExitedプロセスが終了したかどうか、および終了コードが何であったかを OS に問い合わせます。それでおしまい。

出力リダイレクトのトピック全体は適用されません。

そこで見つけたコードは、常に false と評価されます。それを削除し、誰がそれを書いたのかを調べて、彼の意図を尋ねてください。おそらく誤解です。

于 2013-08-27T16:06:10.773 に答える
1

からThread.IsBackground:

プロセスに属するすべてのフォアグラウンド スレッドが終了すると、共通言語ランタイムはプロセスを終了します。残りのバックグラウンド スレッドはすべて停止され、完了しません。

私にとって、これは、プロセスが終了すると、スレッドがコードを実行しないことを意味します。

Process.HasExitedのステートメントについては、次のようになります。

標準出力が非同期イベント ハンドラーにリダイレクトされている場合、このプロパティが true を返したときに出力処理が完了していない可能性があります。非同期イベント処理が完了したことを確認するには、HasExited を確認する前に、パラメーターを取らない WaitForExit() オーバーロードを呼び出します。

非同期イベントハンドラーは現在のプロセスのスレッドであり、プロセス自体を終了する必要がある場合は終了するため、これは当てはまらないと思います。他のプロセスにアタッチされている場合にのみ実行できます。

于 2013-08-27T16:03:04.517 に答える