Dieser Artikel wurde maschinell übersetzt. Wenn Sie die englische Version des Artikels anzeigen möchten, aktivieren Sie das Kontrollkästchen Englisch. Sie können den englischen Text auch in einem Popupfenster anzeigen, indem Sie den Mauszeiger über den Text bewegen.
Übersetzung
Englisch

Thread.Interrupt-Methode: ()

 

Veröffentlicht: Oktober 2016

Unterbricht einen Thread, der sich im WaitSleepJoin-Threadzustand befindet.

Namespace:   System.Threading
Assembly:  mscorlib (in mscorlib.dll)

[SecurityPermissionAttribute(SecurityAction.Demand, ControlThread = true)]
public void Interrupt()

Exception Condition
SecurityException

Der Aufrufer verfügt nicht über die entsprechende SecurityPermission.

Falls dieser Thread sich zurzeit nicht in einem Warten, Standby- oder Verknüpfungszustand befindet, wird er bei der nächsten Blockierung unterbrochen.

ThreadInterruptedException wird im unterbrochenen Thread, jedoch erst, nachdem der Thread blockiert ausgelöst. Wenn der Thread nie blockiert wird, wird keine Ausnahme ausgelöst und daher möglicherweise ohne jegliche Unterbrechung wird der Thread abgeschlossen.

Im folgenden Codebeispiel wird das Verhalten der ausgeführten Thread aus, wenn dieser unterbrochen und anschließend gesperrt wird.

using System;
using System.Security.Permissions;
using System.Threading;

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.");
        }
    }
}

SecurityPermission

for advanced operations on threads. Associated enumeration: F:System.Security.Permissions.SecurityPermissionFlag.ControlThread.

.NET Framework
Verfügbar seit 1.1
Zurück zum Anfang
Anzeigen: