【解決方法】スレッドが中止されたという例外メッセージが発生するのはなぜですか?


スレッドを中止すると、スレッドが中止されたという例外が発生します
この例外を削除する方法はありますか…

[Same Question without all the capitals]

スレッドを中止すると、スレッドが中止されたという例外が発生します
この例外を削除する方法はありますか…

解決策 2

何かを見つけたわけではありませんが、ただそれを捕まえて先に進みます。 これは、そのスレッドで実行されているコードがその停止を知る方法を提供するために行われたと思います。 そうすれば、スレッドが消える前に例外をキャッチし、必要なクリーンアップを行うことができます(Finallyはまだ実行されると思います)。

.NET 1.1 以降、Threads や winForms にはあまり触れていないので、何かが変わっている可能性があります。 間違っていたら遠慮なく訂正してください。

解決策 3

いいえ。その目的は、 ThreadAbortException これは、中止されたスレッドに、スレッド自体の後にクリーンアップを行い、保持している可能性のあるリソースを解放する時期が来たことを通知することです。 スレッドにこれを実行する機会がない場合、アプリケーションが不整合状態のままになる可能性があり、これはリソースのリークからメモリの破損に至るまでのあらゆる事態を意味し、後々アプリケーションのクラッシュを引き起こす可能性が高くなります。

このため、スレッドを中止することは悪い習慣であると考えられます。 使用する代わりに Thread.Abort()、プログラムの一貫性を維持するために、スレッドが正常に終了できるように、スレッドに終了する時期が来たことを通知する協調的な方法を考案することをお勧めします。

解決策 4

SomeGuyThatIsMe が正しいです。 読んでわかるように、 MSDN に関するドキュメント Thread.Abort メソッド (System.Threading)[^]:

「このメソッドがスレッド上で呼び出されると、システムは ThreadAbortException スレッド内で中止します。 ThreadAbortException アプリケーション コードによってキャッチできる特別な例外ですが、そうでない場合は catch ブロックの最後で再スローされます。 ResetAbort と呼ばれます。 ResetAbort は中止要求をキャンセルし、ThreadAbortException によるスレッドの終了を防ぎます。 未実行のfinallyブロックは、スレッドが中止される前に実行されます。」

これにより、スレッドに、割り当てられた可能性のあるリソースをクリーンアップし、中止要求を拒否する機会が与えられます。

クリーンアップが必要ない場合は、スレッド メソッドを try/catch ブロック。

解決策 5

こんにちは、

問題: 「スレッドが中止されました例外メッセージ」

以下のように catch ブロックを使用してください。
試す
{

}
catch (ThreadAbortException ex)
{
Thread.ResetAbort();
}

ありがとうございます。それでは、お元気で
アバイ・マルヴィヤ

コメント

タイトルとURLをコピーしました