ThreadAbortException クラス
アセンブリ: mscorlib (mscorlib.dll 内)

<SerializableAttribute> _ <ComVisibleAttribute(True)> _ Public NotInheritable Class ThreadAbortException Inherits SystemException
[SerializableAttribute] [ComVisibleAttribute(true)] public sealed class ThreadAbortException : SystemException
[SerializableAttribute] [ComVisibleAttribute(true)] public ref class ThreadAbortException sealed : public SystemException

スレッドを破棄するために Abort メソッドが呼び出されるときに、共通言語ランタイムは ThreadAbortException をスローします。ThreadAbortException は、キャッチできても、catch ブロックの末尾でもう一度自動的に発生する特殊な例外です。この例外が発生すると、ランタイムは、スレッドを終了する前に finally ブロックをすべて実行します。スレッドは、finally ブロックで無制限に計算を実行することも、Thread.ResetAbort を呼び出して中止をキャンセルすることもできるため、スレッドが終了するかどうかは保証されません。中止されたスレッドが終了するまで待機する場合は、Thread.Join メソッドを呼び出すことができます。Join は、スレッドが実際に実行を停止するまで戻らないブロッキング呼び出しです。
![]() |
---|
共通言語ランタイム (CLR) は、マネージ実行可能ファイル内のすべてのフォアグラウンド スレッドが終了した後でバックグラウンド スレッドを中止するときに、System.Threading.Thread.Abort を使用しません。したがって、ThreadAbortException を使用して CLR によるバックグラウンド スレッドの終了を検出することはできません。 |
ThreadAbortException は、値 0x80131530 を保持する HRESULT COR_E_THREADABORTED を使用します。

スレッドを中止する例を次に示します。ThreadAbortException を受け取ったスレッドは、ResetAbort メソッドを使用して中止要求をキャンセルし、実行を継続します。
Imports System Imports System.Threading Imports System.Security.Permissions Public Class ThreadWork Public Shared Sub DoWork() Try Dim i As Integer For i = 0 To 99 Console.WriteLine("Thread - working.") Thread.Sleep(100) Next i Catch e As ThreadAbortException Console.WriteLine("Thread - caught ThreadAbortException - resetting.") Console.WriteLine("Exception message: {0}", e.Message) Thread.ResetAbort() End Try Console.WriteLine("Thread - still alive and working.") Thread.Sleep(1000) Console.WriteLine("Thread - finished working.") End Sub 'DoWork End Class 'ThreadWork Class ThreadAbortTest Public Shared Sub Main() Dim myThreadDelegate As New ThreadStart(AddressOf ThreadWork.DoWork) Dim myThread As New Thread(myThreadDelegate) myThread.Start() Thread.Sleep(100) Console.WriteLine("Main - aborting my thread.") myThread.Abort() myThread.Join() Console.WriteLine("Main ending.") End Sub 'Main End Class 'ThreadAbortTest
using System; using System.Threading; using System.Security.Permissions; public class ThreadWork { public static void DoWork() { try { for(int i=0; i<100; i++) { Console.WriteLine("Thread - working."); Thread.Sleep(100); } } catch(ThreadAbortException e) { Console.WriteLine("Thread - caught ThreadAbortException - resetting."); Console.WriteLine("Exception message: {0}", e.Message); Thread.ResetAbort(); } Console.WriteLine("Thread - still alive and working."); Thread.Sleep(1000); Console.WriteLine("Thread - finished working."); } } class ThreadAbortTest { public static void Main() { ThreadStart myThreadDelegate = new ThreadStart(ThreadWork.DoWork); Thread myThread = new Thread(myThreadDelegate); myThread.Start(); Thread.Sleep(100); Console.WriteLine("Main - aborting my thread."); myThread.Abort(); myThread.Join(); Console.WriteLine("Main ending."); } }
using namespace System; using namespace System::Threading; using namespace System::Security::Permissions; ref class ThreadWork { public: static void DoWork() { try { for ( int i = 0; i < 100; i++ ) { Console::WriteLine( "Thread - working." ); Thread::Sleep( 100 ); } } catch ( ThreadAbortException^ e ) { Console::WriteLine( "Thread - caught ThreadAbortException - resetting." ); Console::WriteLine( "Exception message: {0}", e->Message ); Thread::ResetAbort(); } Console::WriteLine( "Thread - still alive and working." ); Thread::Sleep( 1000 ); Console::WriteLine( "Thread - finished working." ); } }; int main() { ThreadStart^ myThreadDelegate = gcnew ThreadStart( ThreadWork::DoWork ); Thread^ myThread = gcnew Thread( myThreadDelegate ); myThread->Start(); Thread::Sleep( 100 ); Console::WriteLine( "Main - aborting my thread." ); myThread->Abort(); myThread->Join(); Console::WriteLine( "Main ending." ); }
import System.*; import System.Threading.*; import System.Security.Permissions.*; public class ThreadWork { public static void DoWork() { try { for (int i = 0; i < 100; i++) { Console.WriteLine("Thread - working."); System.Threading.Thread.Sleep(100); } } catch (ThreadAbortException e) { Console.WriteLine("Thread - caught ThreadAbortException" + " - resetting."); Console.WriteLine("Exception message: {0}", e.get_Message()); System.Threading.Thread.ResetAbort(); } Console.WriteLine("Thread - still alive and working."); System.Threading.Thread.Sleep(1000); Console.WriteLine("Thread - finished working."); } //DoWork } //ThreadWork class ThreadAbortTest { public static void main(String[] args) { ThreadStart myThreadDelegate = new ThreadStart(ThreadWork.DoWork); System.Threading.Thread myThread = new System.Threading.Thread(myThreadDelegate); myThread.Start(); System.Threading.Thread.Sleep(100); Console.WriteLine("main - aborting my thread."); myThread.Abort(); myThread.Join(); Console.WriteLine("main ending."); } //main } //ThreadAbortTest

System.Exception
System.SystemException
System.Threading.ThreadAbortException


Windows 98, Windows 2000 SP4, Windows CE, Windows Millennium Edition, Windows Mobile for Pocket PC, Windows Mobile for Smartphone, Windows Server 2003, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP SP2, Windows XP Starter Edition
開発プラットフォームの中には、.NET Framework によってサポートされていないバージョンがあります。サポートされているバージョンについては、「システム要件」を参照してください。


ThreadAbortException プロパティ

名前 | 説明 | |
---|---|---|
![]() | Data | 例外に関する追加のユーザー定義情報を提供するキー/値ペアのコレクションを取得します。 ( Exception から継承されます。) |
![]() ![]() | HelpLink | 例外に関連付けられているヘルプ ファイルへのリンクを取得または設定します。 ( Exception から継承されます。) |
![]() | InnerException | 現在の例外を発生させた Exception インスタンスを取得します。 ( Exception から継承されます。) |
![]() | Message | 現在の例外を説明するメッセージを取得します。 ( Exception から継承されます。) |
![]() | Source | エラーの原因となったアプリケーションまたはオブジェクトの名前を取得または設定します。 ( Exception から継承されます。) |
![]() | StackTrace | 現在の例外がスローされたときにコール スタックにあったフレームの文字列形式を取得します。 ( Exception から継承されます。) |
![]() | TargetSite | 現在の例外をスローするメソッドを取得します。 ( Exception から継承されます。) |

ThreadAbortException メソッド

名前 | 説明 | |
---|---|---|
![]() | Equals | オーバーロードされます。 2 つの Object インスタンスが等しいかどうかを判断します。 ( Object から継承されます。) |
![]() | GetBaseException | 派生クラスでオーバーライドされた場合、それ以後に発生する 1 つ以上の例外の主要な原因である Exception を返します。 ( Exception から継承されます。) |
![]() | GetHashCode | 特定の型のハッシュ関数として機能します。GetHashCode は、ハッシュ アルゴリズムや、ハッシュ テーブルのようなデータ構造での使用に適しています。 ( Object から継承されます。) |
![]() | GetObjectData | 派生クラスでオーバーライドされた場合は、その例外に関する情報を使用して SerializationInfo を設定します。 ( Exception から継承されます。) |
![]() | GetType | 現在のインスタンスのランタイム型を取得します。 ( Exception から継承されます。) |
![]() | ReferenceEquals | 指定した複数の Object インスタンスが同一かどうかを判断します。 ( Object から継承されます。) |
![]() | ToString | 現在の例外の文字列形式を作成して返します。 ( Exception から継承されます。) |

ThreadAbortException メンバ
Abort メソッドが呼び出されるときにスローされる例外。このクラスは継承できません。
ThreadAbortException データ型で公開されるメンバを以下の表に示します。

名前 | 説明 | |
---|---|---|
![]() | Data | 例外に関する追加のユーザー定義情報を提供するキー/値ペアのコレクションを取得します。(Exception から継承されます。) |
![]() ![]() | HelpLink | 例外に関連付けられているヘルプ ファイルへのリンクを取得または設定します。(Exception から継承されます。) |
![]() | InnerException | 現在の例外を発生させた Exception インスタンスを取得します。(Exception から継承されます。) |
![]() | Message | 現在の例外を説明するメッセージを取得します。(Exception から継承されます。) |
![]() | Source | エラーの原因となったアプリケーションまたはオブジェクトの名前を取得または設定します。(Exception から継承されます。) |
![]() | StackTrace | 現在の例外がスローされたときにコール スタックにあったフレームの文字列形式を取得します。(Exception から継承されます。) |
![]() | TargetSite | 現在の例外をスローするメソッドを取得します。(Exception から継承されます。) |

名前 | 説明 | |
---|---|---|
![]() | Equals | オーバーロードされます。 2 つの Object インスタンスが等しいかどうかを判断します。 (Object から継承されます。) |
![]() | GetBaseException | 派生クラスでオーバーライドされた場合、それ以後に発生する 1 つ以上の例外の主要な原因である Exception を返します。 (Exception から継承されます。) |
![]() | GetHashCode | 特定の型のハッシュ関数として機能します。GetHashCode は、ハッシュ アルゴリズムや、ハッシュ テーブルのようなデータ構造での使用に適しています。 (Object から継承されます。) |
![]() | GetObjectData | 派生クラスでオーバーライドされた場合は、その例外に関する情報を使用して SerializationInfo を設定します。 (Exception から継承されます。) |
![]() | GetType | 現在のインスタンスのランタイム型を取得します。 (Exception から継承されます。) |
![]() | ReferenceEquals | 指定した複数の Object インスタンスが同一かどうかを判断します。 (Object から継承されます。) |
![]() | ToString | 現在の例外の文字列形式を作成して返します。 (Exception から継承されます。) |

- ThreadAbortExceptionのページへのリンク