Thread.Abort メソッド ()
アセンブリ: mscorlib (mscorlib.dll 内)



このメソッドをスレッド上で呼び出すと、スレッドで ThreadAbortException がスローされ、スレッドが中止されます。ThreadAbortException は、アプリケーション コードでキャッチできても ResetAbort を呼び出さない限り catch ブロックの末尾で再スローされる特殊な例外です。ResetAbort は中止要求をキャンセルし、ThreadAbortException によってスレッドが終了されるのを防ぎます。実行されていない finally ブロックは、スレッドが中止される前に実行されます。
![]() |
---|
スレッドが自身に対して Abort を呼び出した場合、その結果は例外をスローした場合と似ています。ThreadAbortException がすぐに発生し、結果は予期できます。ただし、別のスレッドに対して Abort を呼び出した場合、この結果中断されるコードは予期できません。また、静的なコンストラクタが中断される可能性もあります。まれにしか起こりませんが、これによって、そのアプリケーション ドメインでそのクラスのインスタンスの作成が中断されることもあります。.NET Framework Version 1.0 および 1.1 では、finally ブロックの実行中にスレッドが中止される場合があります。この場合は finally ブロックが中止されます。 |
スレッドがすぐに確実に中止されるかどうかは保証できません。この状況は、アボート プロシージャの一部として呼び出される finally ブロックでスレッドが無制限に計算を実行した結果、無制限に中止が遅れる場合に発生することがあります。スレッドが中止されるまで待機するには、Abort メソッドを呼び出した後にスレッドで Join メソッドを呼び出します。ただし、待機が確実に終了するとは限りません。
起動していないスレッドで Abort が呼び出されると、Start が呼び出されたときにスレッドは中止します。ブロック状態またはスリープ状態のスレッドで Abort を呼び出すと、そのスレッドは中断してから中止します。
中断中のスレッドで Abort を呼び出すと、Abort を呼び出したスレッド内で ThreadStateException がスローされ、中止するスレッドの ThreadState プロパティに AbortRequested が追加されます。中断されたスレッドでは、Resume が呼び出されるまで ThreadAbortException はスローされません。
アンマネージ コードの実行中にスレッドが ThreadAbortException を無視すると、スレッドがマネージ コードの実行を開始したときに ThreadAbortException が再スローされます。
Abort を同時に 2 回呼び出すと、1 回目の呼び出しで状態情報を設定し、もう 1 回の呼び出しで Abort を実行できます。ただし、アプリケーションはこの状態を区別できません。
スレッドで Abort を呼び出した後は、そのスレッドの状態には AbortRequested も含まれます。Abort を正常に呼び出した結果スレッドが終了すると、スレッドの状態が Stopped に変更されます。十分なアクセス許可がある場合、Abort の対象となるスレッドは、ResetAbort メソッドを使用して中止をキャンセルできます。ResetAbort メソッドの呼び出し例については、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 によってサポートされていないバージョンがあります。サポートされているバージョンについては、「システム要件」を参照してください。


Thread.Abort メソッド (Object)
アセンブリ: mscorlib (mscorlib.dll 内)



このメソッドをスレッド上で呼び出すと、スレッドで ThreadAbortException がスローされ、スレッドが中止されます。ThreadAbortException は、アプリケーション コードでキャッチできても ResetAbort を呼び出さない限り catch ブロックの末尾で再スローされる特殊な例外です。ResetAbort は中止要求をキャンセルし、ThreadAbortException によってスレッドが終了されるのを防ぎます。実行されていない finally ブロックは、スレッドが中止される前に実行されます。
![]() |
---|
スレッドが自身に対して Abort を呼び出した場合、その結果は例外をスローした場合と似ています。ThreadAbortException がすぐに発生し、結果は予期できます。ただし、別のスレッドに対して Abort を呼び出した場合、この結果中断されるコードは予期できません。静的コンストラクタが中止される可能性があります。まれにしか起こりませんが、これによって、そのアプリケーション ドメインでそのクラスのインスタンスの作成が中断されることもあります。.NET Framework Version 1.0 および 1.1 では、finally ブロックの実行中にスレッドが中止される場合があります。この場合は finally ブロックが中止されます。 |
スレッドがすぐに確実に中止されるかどうかは保証できません。この状況は、アボート プロシージャの一部として呼び出される finally ブロックでスレッドが無制限に計算を実行した結果、無制限に中止が遅れる場合に発生することがあります。スレッドが中止されるまで待機するには、Abort メソッドを呼び出した後にスレッドで Join メソッドを呼び出します。ただし、待機が確実に終了するとは限りません。
起動していないスレッドで Abort が呼び出されると、Start が呼び出されたときにスレッドは中止します。ブロック状態またはスリープ状態のスレッドで Abort を呼び出すと、そのスレッドは中断してから中止します。
中断中のスレッドで Abort を呼び出すと、Abort を呼び出したスレッド内で ThreadStateException がスローされ、中止するスレッドの ThreadState プロパティに AbortRequested が追加されます。中断されたスレッドでは、Resume が呼び出されるまで ThreadAbortException はスローされません。
アンマネージ コードの実行中にスレッドが ThreadAbortException を無視すると、スレッドがマネージ コードの実行を開始したときに ThreadAbortException が再スローされます。
Abort を同時に 2 回呼び出すと、1 回目の呼び出しで状態情報を設定し、もう 1 回の呼び出しで Abort を実行できます。ただし、アプリケーションはこの状態を区別できません。
スレッドで Abort を呼び出した後は、そのスレッドの状態には AbortRequested も含まれます。Abort を正常に呼び出した結果スレッドが終了すると、スレッドの状態が Stopped に変更されます。十分なアクセス許可がある場合、Abort の対象となるスレッドは、ResetAbort メソッドを使用して中止をキャンセルできます。ResetAbort メソッドの呼び出し例については、ThreadAbortException クラスのトピックを参照してください。

Imports System Imports System.Threading Public Class Test <MTAThread> _ Shared Sub Main() Dim newThread As New Thread(AddressOf TestMethod) newThread.Start() Thread.Sleep(1000) ' Abort newThread. Console.WriteLine("Main aborting new thread.") newThread.Abort("Information from Main.") ' Wait for the thread to terminate. newThread.Join() Console.WriteLine("New thread terminated - Main exiting.") End Sub Shared Sub TestMethod() Try While True Console.WriteLine("New thread running.") Thread.Sleep(1000) End While Catch abortException As ThreadAbortException Console.WriteLine( _ CType(abortException.ExceptionState, String)) End Try End Sub End Class
using System; using System.Threading; class Test { public static void Main() { Thread newThread = new Thread(new ThreadStart(TestMethod)); newThread.Start(); Thread.Sleep(1000); // Abort newThread. Console.WriteLine("Main aborting new thread."); newThread.Abort("Information from Main."); // Wait for the thread to terminate. newThread.Join(); Console.WriteLine("New thread terminated - Main exiting."); } static void TestMethod() { try { while(true) { Console.WriteLine("New thread running."); Thread.Sleep(1000); } } catch(ThreadAbortException abortException) { Console.WriteLine((string)abortException.ExceptionState); } } }
using namespace System; using namespace System::Threading; ref class Test { private: Test(){} public: static void TestMethod() { try { while ( true ) { Console::WriteLine( "New thread running." ); Thread::Sleep( 1000 ); } } catch ( ThreadAbortException^ abortException ) { Console::WriteLine( dynamic_cast<String^>(abortException->ExceptionState) ); } } }; int main() { Thread^ newThread = gcnew Thread( gcnew ThreadStart( &Test::TestMethod ) ); newThread->Start(); Thread::Sleep( 1000 ); // Abort newThread. Console::WriteLine( "Main aborting new thread." ); newThread->Abort( "Information from main." ); // Wait for the thread to terminate. newThread->Join(); Console::WriteLine( "New thread terminated - main exiting." ); }
import System.*; import System.Threading.*; import System.Threading.Thread; class Test { public static void main(String[] args) { Thread newThread = new Thread(new ThreadStart(TestMethod)); newThread.Start(); Thread.Sleep(1000); // Abort newThread. Console.WriteLine("Main aborting new thread."); newThread.Abort("Information from Main."); // Wait for the thread to terminate. newThread.Join(); Console.WriteLine("New thread terminated - Main exiting."); } //main static void TestMethod() { try { while (true) { Console.WriteLine("New thread running."); Thread.Sleep(1000); } } catch (ThreadAbortException abortException) { Console.WriteLine((System.String)(abortException. get_ExceptionState())); } } //TestMethod } //Test


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 によってサポートされていないバージョンがあります。サポートされているバージョンについては、「システム要件」を参照してください。


Thread.Abort メソッド

名前 | 説明 |
---|---|
Thread.Abort () | このメソッドが呼び出された対象のスレッドで、そのスレッドの終了プロセスを開始する ThreadAbortException を発生させます。このメソッドを呼び出すと、通常、スレッドが終了します。 .NET Compact Framework によってサポートされています。 |
Thread.Abort (Object) | このメソッドが呼び出された対象のスレッドで、スレッドの終了プロセスを開始する ThreadAbortException を発生させます。またスレッドの終了に関する例外情報も提供します。このメソッドを呼び出すと、通常、スレッドが終了します。 .NET Compact Framework によってサポートされています。 |

- Thread.Abortのページへのリンク