Verwenden von Threads und ThreadingUsing threads and threading

Sie können mit .NET Anwendungen schreiben, die mehrere Vorgänge zur gleichen Zeit ausführen.With .NET, you can write applications that perform multiple operations at the same time. Vorgänge, die möglicherweise andere Vorgänge aufhalten, können in separaten Threads ausgeführt werden. Dieser Prozess ist als Multithreading oder Freies Threading bekannt.Operations with the potential of holding up other operations can execute on separate threads, a process known as multithreading or free threading.

Clientanwendungen, die Multithreading verwenden, reagieren besser auf Benutzereingaben, weil die Benutzeroberfläche aktiv bleibt, da prozessorintensive Aufgaben in separaten Threads ausgeführt werden.Applications that use multithreading are more responsive to user input because the user interface stays active as processor-intensive tasks execute on separate threads. Multithreading ist auch nützlich, wenn Sie skalierbare Aufgaben erstellen, da Sie Threads bei steigender Arbeitsauslastung hinzufügen können.Multithreading is also useful when you create scalable applications, because you can add threads as the workload increases.

Hinweis

Wenn Sie mehr Kontrolle über das Verhalten von Threads der Anwendung benötigen, können Sie die Threads selbst verwalten.If you need more control over the behavior of the application's threads, you can manage the threads yourself. Ab .NET Framework 4 wird die Multithreadprogrammierung durch die Klassen System.Threading.Tasks.Parallel und System.Threading.Tasks.Task, Parallel LINQ (PLINQ), neue parallele Sammlungsklassen im System.Collections.Concurrent-Namespace und ein neues Programmiermodell, das auf dem Konzept von Tasks anstatt von Threads basiert, erheblich vereinfacht.However, starting with the .NET Framework 4, multithreaded programming is greatly simplified with the System.Threading.Tasks.Parallel and System.Threading.Tasks.Task classes, Parallel LINQ (PLINQ), new concurrent collection classes in the System.Collections.Concurrent namespace, and a new programming model that is based on the concept of tasks rather than threads. Weitere Informationen finden Sie in den Artikeln zur parallelen Programmierung und zu Task Parallel Library (TPL).For more information, see Parallel Programming and Task Parallel Library (TPL).

Vorgehensweise: Erstellen und Starten eines neuen ThreadsHow to: Create and start a new thread

Sie können einen neuen Thread erstellen, indem Sie eine neue Instanz der System.Threading.Thread-Klasse erstellen und den Namen der Methode angeben, die Sie in einem neuen Thread an den Konstruktor ausführen möchten.You create a new thread by creating a new instance of the System.Threading.Thread class and providing the name of the method that you want to execute on a new thread to the constructor. Rufen Sie die Thread.Start-Methode auf, um einen erstellten Thread auszuführen.To start a created thread, call the Thread.Start method. Weitere Informationen und Beispiele finden Sie unter Erstellen von Threads und Übergeben von Daten zur Startzeit und in der Thread-API-Referenz.For more information and examples, see the Creating threads and passing data at start time article and the Thread API reference.

Vorgehensweise: Anhalten eines ThreadsHow to: Stop a thread

Verwenden Sie die Thread.Abort-Methode, um die Ausführung eines Threads zu beenden.To terminate the execution of a thread, use the Thread.Abort method. Diese Methode löst eine ThreadAbortException im Thread aus, in dem sie aufgerufen wird.That method raises a ThreadAbortException on the thread on which it's invoked. Weitere Informationen finden Sie unter Zerstören von Threads.For more information, see Destroying threads.

Ab .NET Framework 4 können Sie die System.Threading.CancellationToken verwenden, um einen Thread kooperativ abzubrechen.Beginning with the .NET Framework 4, you can use the System.Threading.CancellationToken to cancel a thread cooperatively. Weitere Informationen finden Sie unter Abbruch in verwalteten Threads.For more information, see Cancellation in managed threads.

Verwenden Sie die Thread.Join-Methode, damit der aufrufende Thread auf das Beenden des Threads wartet, in dem die Methode aufgerufen wurde.Use the Thread.Join method to make the calling thread wait for the termination of the thread on which the method is invoked.

Vorgehensweise: Anhalten oder Unterbrechen eines ThreadsHow to: Pause or interrupt a thread

Mit der Thread.Sleep-Methode können Sie den aktuellen Thread für bestimmte Zeit pausieren.You use the Thread.Sleep method to pause the current thread for a specified amount of time. Sie können einen blockierten Thread unterbrechen, indem Sie die Thread.Interrupt-Methode aufrufen.You can interrupt a blocked thread by calling the Thread.Interrupt method. Weitere Informationen finden Sie unter Pausing and interrupting threads (Anhalten und Unterbrechen von Threads).For more information, see Pausing and interrupting threads.

ThreadeigenschaftenThread properties

In der folgenden Tabelle werden einige Thread-Eigenschaften aufgeführt:The following table presents some of the Thread properties:

EigenschaftProperty BeschreibungDescription
IsAlive Gibt true zurück, wenn dieser Thread gestartet und ordnungsgemäß beendet bzw. abgebrochen wurde.Returns true if a thread has been started and has not yet terminated normally or aborted.
IsBackground Es wird ein boolescher Wert abgerufen oder festgelegt, der angibt, ob ein Thread ein Hintergrundthread ist.Gets or sets a Boolean that indicates if a thread is a background thread. Hintergrundthreads sind wie Vordergrundthreads, aber ein Hintergrundthread verhindert nicht, dass ein Prozess beendet wird.Background threads are like foreground threads, but a background thread doesn't prevent a process from stopping. Sobald alle zu einem Prozess gehörenden Vordergrundthreads beendet wurden, beendet die Common Language Runtime den Prozess, indem die Methode Abort in Hintergrundthreads aufgerufen wird, die noch aktiv sind.Once all foreground threads that belong to a process have stopped, the common language runtime ends the process by calling the Abort method on background threads that are still alive. Weitere Informationen finden Sie im Artikel zu Vordergrund- und Hintergrundthreads.For more information, see Foreground and Background Threads.
Name Ruft den Namen eines Threads ab oder legt diesen fest.Gets or sets the name of a thread. Wird am häufigsten beim Debuggen verwendet, um einzelne Threads zu erkennen.Most frequently used to discover individual threads when you debug.
Priority Es wird ein ThreadPriority-Wert abgerufen oder festgelegt, der vom Betriebssystem zum Priorisieren der Threadplanung verwendet wird.Gets or sets a ThreadPriority value that is used by the operating system to prioritize thread scheduling. Weitere Informationen finden Sie unter Scheduling Threads (Planen von Threads) und in der ThreadPriority-Referenz.For more information, see Scheduling threads and the ThreadPriority reference.
ThreadState Ruft einen ThreadState-Wert ab, der die aktuellen Zustände des Threads enthält.Gets a ThreadState value containing the current states of a thread.

Siehe auchSee also