4

Exitthread は Thread 内からのみ呼び出すことができ、Abort は Thread オブジェクトにアクセスできる限りいつでもどこでも使用できることを知っています。しかし、スレッドを強制的に閉じる必要がある場合、これら 2 つの方法 (操作に関して) の間に他の重要な違いはありますか?

4

1 に答える 1

6

そのとおり。

Thread.Abort()恐ろしい、見つけるのが難しいバグを引き起こしますが、そうではありExitThread()ません。

呼び出しThread.Abort()により、スレッド内で例外がスローされ、あらゆる種類の悲しみを引き起こす可能性があります。

また、もちろん、ExitThread()メッセージ ループを実行しているスレッドでのみ機能します。

また、 の呼び出しの後のコードExitThread()は引き続き実行されますが、次のような UI 呼び出しMessageBox.Show()は何もしません。

private void button1_Click(object sender, EventArgs e)
{
    Application.ExitThread();
    MessageBox.Show("This won't be shown because the UI is being shut down.");
    Debug.WriteLine("But this is still executed");
}

制御された方法でスレッドを終了したい場合は、そのためのコードを記述して積極的にサポートする必要があります。

これに関するマイクロソフトの良い記事は次のとおりです。 http://msdn.microsoft.com/en-us/library/dd997364.aspx

于 2013-06-04T08:30:36.990 に答える