Freigeben über


Verwenden von Threads und Threading

Mit .NET können Sie Anwendungen schreiben, die mehrere Vorgänge gleichzeitig ausführen. Vorgänge, die das Potenzial haben, andere Vorgänge aufzuhalten, können in separaten Threads ausgeführt werden. Dieser Prozess wird als Multithreading oder Free Threading bezeichnet.

Anwendungen, die Multithreading verwenden, reagieren stärker auf Benutzereingaben, da die Benutzeroberfläche aktiv bleibt, während prozessorintensive Aufgaben auf separaten Threads ausgeführt werden. Multithreading ist auch nützlich, wenn Sie skalierbare Anwendungen erstellen, da Sie Threads hinzufügen können, während die Workload zunimmt.

Hinweis

Wenn Sie mehr Kontrolle über das Verhalten der Threads der Anwendung benötigen, können Sie die Threads selbst verwalten. Die Multithread-Programmierung wird jedoch erheblich vereinfacht mit den Klassen System.Threading.Tasks.Parallel und System.Threading.Tasks.Task, Parallel LINQ (PLINQ), synchronen Sammlungs-Klassen im System.Collections.Concurrent-Namespace und einem Programmiermodell, das auf dem Konzept von Aufgaben und nicht auf Threads basiert. Weitere Informationen finden Sie unter Parallel Programming and Task Parallel Library (TPL).

Gewusst wie: Erstellen und Starten eines neuen Threads

Sie erstellen einen neuen Thread, indem Sie eine neue Instanz der System.Threading.Thread Klasse erstellen. Sie geben den Namen der Methode an, die Sie für den neuen Thread für den Konstruktor ausführen möchten. Rufen Sie die Thread.Start Methode auf, um einen erstellten Thread zu starten. Weitere Informationen und Beispiele finden Sie im Artikel zum Erstellen von Threads und Übergeben von Daten zum Startzeitpunkt und der Thread API-Referenz.

Vorgehensweise: Beenden eines Threads

Um die Ausführung eines Threads zu beenden, verwenden Sie die System.Threading.CancellationToken. Es bietet eine einheitliche Methode, Threads kooperativ zu stoppen. Weitere Informationen finden Sie unter "Abbruch" in verwalteten Threads.

Manchmal ist es nicht möglich, einen Thread kooperativ zu beenden, da er Drittanbietercode ausführt, der nicht für die kooperative Abbruchfunktion konzipiert ist. In diesem Fall möchten Sie die Ausführung möglicherweise zwangsweise beenden. Um die Ausführung eines Threads zwangsweise zu beenden, können Sie in .NET Framework die Methode Thread.Abort verwenden. Diese Methode löst eine ThreadAbortException im Thread aus, in dem sie aufgerufen wird. Weitere Informationen finden Sie unter "Löschen von Threads". Die Thread.Abort Methode wird in .NET Core nicht unterstützt. Wenn Sie die Ausführung von Drittanbietercode in .NET Core forcibly beenden müssen, führen Sie sie im separaten Prozess aus, und verwenden Sie die Process.Kill Methode.

Dies System.Threading.CancellationToken ist vor .NET Framework 4 nicht verfügbar. Um einen Thread in älteren .NET Framework-Versionen zu beenden, verwenden Sie die Threadsynchronisierungstechniken, um den kooperativen Abbruch manuell zu implementieren. Sie können z. B. das veränderliche boolesche Feld shouldStop erstellen und ihn verwenden, um den code anzufordern, der vom Thread ausgeführt wird, um den Vorgang zu beenden. Weitere Informationen finden Sie unter volatile in der C#-Referenz und System.Threading.Volatile.

Verwenden Sie die Thread.Join-Methode, damit der aufrufende Thread auf die Beendigung des Threads wartet, der angehalten wird.

Vorgehensweise: Anhalten oder Unterbrechen eines Threads

Sie verwenden die Thread.Sleep Methode, um den aktuellen Thread für einen bestimmten Zeitraum anzuhalten. Sie können einen blockierten Thread unterbrechen, indem Sie die Thread.Interrupt Methode aufrufen. Weitere Informationen finden Sie unter Threads anhalten und unterbrechen.

Threadeigenschaften

In der folgenden Tabelle sind einige der Thread Eigenschaften aufgeführt:

Eigentum BESCHREIBUNG
IsAlive Gibt true zurück, wenn ein Thread gestartet wurde und noch nicht normal beendet oder abgebrochen wurde.
IsBackground Dient zum Abrufen oder Festlegen eines Werts vom Typ Boolean, der angibt, ob ein Thread ein Hintergrundthread ist. Hintergrund-Threads sind wie Vordergrund-Threads. Ein Hintergrundthread verhindert jedoch nicht, dass ein Prozess beendet wird. 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. Weitere Informationen finden Sie unter "Vordergrund- und Hintergrundthreads".
Name Dient zum Abrufen oder Festlegen des Namens eines Threads. Am häufigsten verwendet, um einzelne Threads beim Debuggen zu ermitteln.
Priority Dient zum Abrufen oder Festlegen eines ThreadPriority Werts, der vom Betriebssystem zum Priorisieren der Threadplanung verwendet wird. Weitere Informationen finden Sie unter Scheduling Threads (Planen von Threads) und in der ThreadPriority-Referenz.
ThreadState Ruft einen ThreadState Wert ab, der die aktuellen Zustände eines Threads enthält.

Siehe auch