私はいつもこのようなイベントハンドラで正常な終了の間で疑ってるのスレッドの実行中止:ThreadAbortExceptionの
int result = WaitHandle.WaitAny(handles);
if (result = WAIT_FINALIZE)
FinalizeAndExit();
をしてスレッドを知らせるためにイベントを使用して私は通常、それ以来、ThreadAbortExceptionのアプローチを使用するに傾いている
か、単にスレッドを完成させるためにThreadAbortExceptionの取り扱い...
try
{
// Main execution
}
catch(ThreadAbortException e)
{
// FinalizeAndExit();
}
finally
{
}
を終了する必要がありますcatchブロックの終わりに再生成され、スレッドが "危険な"メソッドによって生き残ってしまうのを防ぎますが、私は両方のアプローチを見てきました。
あなたの意見は? 1つを別のものに使うのが最善の状況はありますか?それとも常にアプローチxを使うのがベストですか?
一方、私がスレッドを中止しないと、スレッドは私の主な実行をブロックするだけで生き残ってしまうことは決してありません。 –
+1。 「実際には、スレッドアボートの例外は純粋に緩和されていないものであり、決して使用しないでください。 -C#コンパイラチームのメンバーEric Lippert http://blogs.msdn.com/ericlippert/archive/2009/03/06/locks-and-exceptions-do-not-mix.aspx –
@JorgeCórdoba、背景を設定することができますあなたがアプリケーションを終了させることができない場合は、アプリケーションが終了したときにそのスレッドが終了します。 – Guffa