Multithreadanwendungen (C#)Multithreaded Applications (C#)

Sie können mit C# Anwendungen schreiben, die mehrere Aufgaben zur gleichen Zeit ausführen.With C#, you can write applications that perform multiple tasks at the same time. Aufgaben, die möglicherweise andere Aufgaben aufhalten, können in separaten Threads ausgeführt werden. Dieser Prozess ist als Multithreading oder Freies Threading bekannt.Tasks with the potential of holding up other tasks 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.

Erstellen und Verwenden von ThreadsCreating and Using Threads

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 your application's threads, you can manage the threads yourself. Beachten Sie jedoch, dass das Schreiben fehlerfreier Multithreadanwendungen schwierig sein kann: Ihre Anwendung reagiert vielleicht nicht mehr oder stößt auf vorübergehende Fehler, die durch Racebedingungen verursacht werden.However, realize that writing correct multithreaded applications can be difficult: Your application may stop responding or experience transient errors caused by race conditions. Weitere Informationen finden Sie unter Threadsichere Komponenten.For more information, see Thread-Safe Components.

Sie erstellen einen neuen Thread, indem Sie eine Variable des Typs Thread deklarieren und den Konstruktor aufrufen, der den Namen der Prozedur oder Methode bereitstellt, die Sie in einem neuen Thread ausführen möchten.You create a new thread by declaring a variable of type Thread and calling the constructor, providing the name of the procedure or method that you want to execute on the new thread. Der folgende Code veranschaulicht dies.The following code provides an example.

System.Threading.Thread newThread =  
    new System.Threading.Thread(AMethod);  

Starten und Beenden von ThreadsStarting and Stopping Threads

Verwenden Sie zum Starten eines neuen Threads die Methode Start, wie im folgenden Code gezeigt wird.To start the execution of a new thread, use the Start method, as shown in the following code.

newThread.Start();  

Verwenden Sie zum Beenden eines Threads die Methode Abort, wie im folgenden Code gezeigt wird.To stop the execution of a thread, use the Abort method, as shown in the following code.

newThread.Abort();  

Neben dem Starten und Beenden von Threads können Sie Threads auch mit den Methoden Sleep oder Suspend anhalten, einen angehaltenen Thread mit der Resume-Methode fortsetzen und einen Thread mithilfe der Abort-Methode zerstören.Besides starting and stopping threads, you can also pause threads by calling the Sleep or Suspend method, resume a suspended thread by using the Resume method, and destroy a thread by using the Abort method

Thread-MethodenThread Methods

Die folgende Tabelle zeigt einige der Methoden, mit denen Sie einzelne Threads steuern.The following table shows some of the methods that you can use to control individual threads.

MethodeMethod AktionAction
Start Bewirkt, dass ein Thread gestartet wirdCauses a thread to start to run.
Sleep Hält einen Thread für eine angegebene Zeit anPauses a thread for a specified time.
Suspend Hält einen Thread an, wenn er einen sicheren Punkt erreichtPauses a thread when it reaches a safe point.
Abort Beendet einen Thread, wenn er einen sicheren Punkt erreichtStops a thread when it reaches a safe point.
Resume Startet einen angehaltenen Thread neuRestarts a suspended thread
Join Bewirkt, dass der aktuelle Thread auf das Ende eines anderen Threads wartet.Causes the current thread to wait for another thread to finish. Wird der Thread mit einem Timeoutwert verwendet, gibt diese Methode True zurück, wenn er in der zugewiesenen Zeit fertig wird.If used with a time-out value, this method returns True if the thread finishes in the allocated time.

SicherungspunkteSafe Points

Die meisten dieser Methoden sind selbsterklärend, doch der Begriff Sicherungspunkte ist vielleicht neu für Sie.Most of these methods are self-explanatory, but the concept of safe points may be new to you. Sicherungspunkte sind Stellen im Code, an denen die Common Language Runtime die automatische Speicherbereinigung – den Prozess zur Freigabe von Speicher und nicht verwendeten Variablen – sicher ausführen kann.Safe points are locations in code where it is safe for the common language runtime to perform automatic garbage collection, the process of releasing unused variables and reclaiming memory. Wenn Sie die Methode Abort oder Suspend eines Threads aufrufen, analysiert die Common Language Runtime den Code und ermittelt den Ort einer geeigneten Stelle, an der der Thread nicht mehr ausgeführt wird.When you call the Abort or Suspend method of a thread, the common language runtime analyzes the code and determines the location of an appropriate location for the thread to stop running.

ThreadeigenschaftenThread Properties

Threads enthalten außerdem einige nützliche Eigenschaften, wie in der folgenden Tabelle dargestellt wird:Threads also contain several useful properties, as shown in the following table:

EigenschaftProperty WertValue
IsAlive Enthält den Wert True, wenn ein Thread aktiv ist.Contains the value True if a thread is active.
IsBackground Es wird ein boolescher Wert abgerufen oder festgelegt, der angibt, ob ein Thread ein Hintergrundthread ist oder sein sollte.Gets or sets a Boolean that indicates if a thread is or should be 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 does not 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.
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 Wert abgerufen oder festgelegt, der vom Betriebssystem zum Priorisieren der Threadplanung verwendet wird.Gets or sets a value that is used by the operating system to prioritize thread scheduling.
ThreadState Enthält einen Wert, der Zustand oder Zustände eines Threads beschreibt.Contains a value that describes a thread's state or states.

ThreadprioritätenThread Priorities

Jeder Thread hat eine Prioritätseigenschaft, die bestimmt, wie groß oder klein ein Segment der Prozessorzeit ist, das er ausführen muss.Every thread has a priority property that determines how big or small a slice of processor time it has to execute. Das Betriebssystem ordnet Threads mit hoher Priorität größere Zeiträume und Threads mit niedriger Priorität kürzere Zeiträume zu.The operating system allocates longer time slices to high-priority threads and shorter time slices to low-priority threads. Neue Threads werden mit dem Wert Normal erstellt, aber Sie können die Eigenschaft Priority auf jeden beliebigen Wert in der ThreadPriority-Enumeration ändern.New threads are created with the value of Normal, but you can change the Priority property to any value in the ThreadPriority enumeration.

Unter ThreadPriority finden Sie eine ausführliche Beschreibung der verschiedenen Threadprioritäten.See ThreadPriority for a detailed description of the various thread priorities.

Vordergrund- und HintergrundthreadsForeground and Background Threads

Ein Vordergrundthread wird dauerhaft ausgeführt, während ein Hintergrundthread beendet wird, sobald der letzte Vordergrundthread beendet wurde.A foreground thread runs indefinitely, whereas a background thread stops as soon as the last foreground thread has stopped. Sie können die Eigenschaft IsBackground verwenden, um den Hintergrundzustand eines Threads zu bestimmen oder zu ändern.You can use the IsBackground property to determine or change the background status of a thread.

Siehe auchSee Also

Thread
Threadsynchronisierung (C#)Thread Synchronization (C#)
Parameter und Rückgabewerte für Multithreadprozeduren (C#)Parameters and Return Values for Multithreaded Procedures (C#)
Threading (C#)Threading (C#)