ThreadInterruptedException-Klasse
Die Ausnahme, die ausgelöst wird, wenn ein Thread im Wartezustand unterbrochen wird.
Namespace: System.Threading
Assembly: mscorlib (in mscorlib.dll)
Syntax
'Declaration
<SerializableAttribute> _
<ComVisibleAttribute(True)> _
Public Class ThreadInterruptedException
Inherits SystemException
'Usage
Dim instance As ThreadInterruptedException
[SerializableAttribute]
[ComVisibleAttribute(true)]
public class ThreadInterruptedException : SystemException
[SerializableAttribute]
[ComVisibleAttribute(true)]
public ref class ThreadInterruptedException : public SystemException
/** @attribute SerializableAttribute() */
/** @attribute ComVisibleAttribute(true) */
public class ThreadInterruptedException extends SystemException
SerializableAttribute
ComVisibleAttribute(true)
public class ThreadInterruptedException extends SystemException
Hinweise
Ein Thread befindet sich nach seiner Erstellung bis zu seiner Zerstörung in einem oder mehreren ThreadState-Zuständen. Wenn ein Thread sich im WaitSleepJoin-Zustand befindet, bewirkt der Aufruf von Interrupt, dass im Zielthread eine ThreadInterruptedException ausgelöst wird. Wenn der Thread sich nicht im WaitSleepJoin-Zustand befindet, wird die Ausnahme erst ausgelöst, wenn der Thread in diesen Zustand wechselt. Wenn der Thread nie blockiert wird, wird er möglicherweise ohne jede Unterbrechung vollständig ausgeführt.
ThreadInterruptedException verwendet HRESULT COR_E_ THREADINTERRUPTED mit dem Wert 0x80131519.
Eine Liste der anfänglichen Eigenschaftenwerte für eine Instanz von ThreadInterruptedException finden Sie unter ThreadInterruptedException-Konstruktoren.
Beispiel
Das folgende Codebeispiel veranschaulicht das Verhalten eines ausgeführten Threads, wenn dieser unterbrochen und anschließend gesperrt wird.
Option Explicit
Option Strict
Imports System
Imports System.Security.Permissions
Imports System.Threading
<Assembly: SecurityPermissionAttribute(SecurityAction.RequestMinimum, _
ControlThread := True)>
Public Class ThreadInterrupt
<MTAThread> _
Shared Sub Main()
Dim stayAwake As New StayAwake()
Dim newThread As New Thread(AddressOf stayAwake.ThreadMethod)
newThread.Start()
' The following line causes an exception to be thrown
' in ThreadMethod if newThread is currently blocked
' or becomes blocked in the future.
newThread.Interrupt()
Console.WriteLine("Main thread calls Interrupt on newThread.")
' Tell newThread to go to sleep.
stayAwake.SleepSwitch = True
' Wait for newThread to end.
newThread.Join()
End Sub
End Class
Public Class StayAwake
Dim sleepSwitchValue As Boolean = False
WriteOnly Property SleepSwitch As Boolean
Set
sleepSwitchValue = Value
End Set
End Property
Sub New()
End Sub
Sub ThreadMethod()
Console.WriteLine("newThread is executing ThreadMethod.")
While Not sleepSwitchValue
' Use SpinWait instead of Sleep to demonstrate the
' effect of calling Interrupt on a running thread.
Thread.SpinWait(10000000)
End While
Try
Console.WriteLine("newThread going to sleep.")
' When newThread goes to sleep, it is immediately
' woken up by a ThreadInterruptedException.
Thread.Sleep(Timeout.Infinite)
Catch ex As ThreadInterruptedException
Console.WriteLine("newThread cannot go to " & _
"sleep - interrupted by main thread.")
End Try
End Sub
End Class
using System;
using System.Security.Permissions;
using System.Threading;
[assembly: SecurityPermissionAttribute(SecurityAction.RequestMinimum,
ControlThread = true)]
class ThreadInterrupt
{
static void Main()
{
StayAwake stayAwake = new StayAwake();
Thread newThread =
new Thread(new ThreadStart(stayAwake.ThreadMethod));
newThread.Start();
// The following line causes an exception to be thrown
// in ThreadMethod if newThread is currently blocked
// or becomes blocked in the future.
newThread.Interrupt();
Console.WriteLine("Main thread calls Interrupt on newThread.");
// Tell newThread to go to sleep.
stayAwake.SleepSwitch = true;
// Wait for newThread to end.
newThread.Join();
}
}
class StayAwake
{
bool sleepSwitch = false;
public bool SleepSwitch
{
set{ sleepSwitch = value; }
}
public StayAwake(){}
public void ThreadMethod()
{
Console.WriteLine("newThread is executing ThreadMethod.");
while(!sleepSwitch)
{
// Use SpinWait instead of Sleep to demonstrate the
// effect of calling Interrupt on a running thread.
Thread.SpinWait(10000000);
}
try
{
Console.WriteLine("newThread going to sleep.");
// When newThread goes to sleep, it is immediately
// woken up by a ThreadInterruptedException.
Thread.Sleep(Timeout.Infinite);
}
catch(ThreadInterruptedException e)
{
Console.WriteLine("newThread cannot go to sleep - " +
"interrupted by main thread.");
}
}
}
using namespace System;
using namespace System::Security::Permissions;
using namespace System::Threading;
[assembly:SecurityPermissionAttribute(SecurityAction::RequestMinimum,
ControlThread=true)];
ref class StayAwake
{
private:
bool sleepSwitch;
public:
property bool SleepSwitch
{
void set( bool value )
{
sleepSwitch = value;
}
}
StayAwake()
{
sleepSwitch = false;
}
void ThreadMethod()
{
Console::WriteLine( "newThread is executing ThreadMethod." );
while ( !sleepSwitch )
{
// Use SpinWait instead of Sleep to demonstrate the
// effect of calling Interrupt on a running thread.
Thread::SpinWait( 10000000 );
}
try
{
Console::WriteLine( "newThread going to sleep." );
// When newThread goes to sleep, it is immediately
// woken up by a ThreadInterruptedException.
Thread::Sleep( Timeout::Infinite );
}
catch ( ThreadInterruptedException^ /*e*/ )
{
Console::WriteLine( "newThread cannot go to sleep - "
"interrupted by main thread." );
}
}
};
int main()
{
StayAwake^ stayAwake = gcnew StayAwake;
Thread^ newThread = gcnew Thread( gcnew ThreadStart( stayAwake, &StayAwake::ThreadMethod ) );
newThread->Start();
// The following line causes an exception to be thrown
// in ThreadMethod if newThread is currently blocked
// or becomes blocked in the future.
newThread->Interrupt();
Console::WriteLine( "Main thread calls Interrupt on newThread." );
// Then tell newThread to go to sleep.
stayAwake->SleepSwitch = true;
// Wait for newThread to end.
newThread->Join();
}
import System.*;
import System.Security.Permissions.*;
import System.Threading.*;
import System.Threading.Thread;
/** @assembly SecurityPermissionAttribute(SecurityAction.RequestMinimum,
ControlThread = true)
*/
class ThreadInterrupt
{
public static void main(String[] args)
{
StayAwake stayAwake = new StayAwake();
Thread newThread = new Thread(new ThreadStart(stayAwake.ThreadMethod));
newThread.Start();
// The following line causes an exception to be thrown
// in ThreadMethod if newThread is currently blocked
// or becomes blocked in the future.
newThread.Interrupt();
Console.WriteLine("Main thread calls Interrupt on newThread.");
// Tell newThread to go to sleep.
stayAwake.set_SleepSwitch(true);
// Wait for newThread to end.
newThread.Join();
} //main
} //ThredInterrupt
class StayAwake
{
private boolean sleepSwitch = false;
/** @property
*/
public void set_SleepSwitch(boolean value)
{
sleepSwitch = value;
} //set_SleepSwitch
public StayAwake()
{
} //StayAwake
public void ThreadMethod()
{
Console.WriteLine("newThread is executing ThreadMethod.");
while (!(sleepSwitch)) {
// Use SpinWait instead of Sleep to demonstrate the
// effect of calling Interrupt on a running thread.
Thread.SpinWait(10000000);
}
try {
Console.WriteLine("newThread going to sleep.");
// When newThread goes to sleep, it is immediately
// woken up by a ThreadInterruptedException.
Thread.Sleep(Timeout.Infinite);
}
catch (ThreadInterruptedException e) {
Console.WriteLine(("newThread cannot go to sleep - "
+ "nterrupted by main thread."));
}
} //ThreadMethod
} //StayAwake
Vererbungshierarchie
System.Object
System.Exception
System.SystemException
System.Threading.ThreadInterruptedException
Threadsicherheit
Alle öffentlichen statischen (Shared in Visual Basic) Member dieses Typs sind threadsicher. Bei Instanzmembern ist die Threadsicherheit nicht gewährleistet.
Plattformen
Windows 98, Windows 2000 SP4, Windows Millennium Edition, Windows Server 2003, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP SP2, Windows XP Starter Edition
.NET Framework unterstützt nicht alle Versionen sämtlicher Plattformen. Eine Liste der unterstützten Versionen finden Sie unter Systemanforderungen.
Versionsinformationen
.NET Framework
Unterstützt in: 2.0, 1.1, 1.0
Siehe auch
Referenz
ThreadInterruptedException-Member
System.Threading-Namespace
Thread-Klasse
ThreadState
Weitere Ressourcen
Anhalten und Fortsetzen von Threads
Verwaltetes und nicht verwaltetes Threading