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-Klasse

 

Veröffentlicht: Oktober 2016

Erstellt und steuert einen Thread, legt dessen Priorität fest und ruft den Status ab.

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


[ClassInterfaceAttribute(ClassInterfaceType::None)]
[ComVisibleAttribute(true)]
public ref class Thread sealed : CriticalFinalizerObject, _Thread

NameBeschreibung
System_CAPS_pubmethodThread(ParameterizedThreadStart^)

Initialisiert eine neue Instanz der Thread-Klasse und gibt dabei einen Delegaten an, der das Übergeben eines Objekts an den Thread bei dessen Start ermöglicht.

System_CAPS_pubmethodThread(ParameterizedThreadStart^, Int32)

Initialisiert eine neue Instanz der Thread-Klasse und gibt dabei einen Delegaten, der das Übergeben eines Objekts an den Thread bei dessen Start ermöglicht, sowie eine maximale Stapelgröße für den Thread an.

System_CAPS_pubmethodThread(ThreadStart^)

Initialisiert eine neue Instanz der Thread-Klasse.

System_CAPS_pubmethodThread(ThreadStart^, Int32)

Initialisiert eine neue Instanz der Thread-Klasse und gibt die maximale Stapelgröße für den Thread an.

NameBeschreibung
System_CAPS_pubpropertyApartmentState

Veraltet.Ruft den Apartmentzustand dieses Threads ab oder legt diesen fest.

System_CAPS_pubpropertySystem_CAPS_staticCurrentContext

Ruft den aktuellen Kontext ab, in dem der Thread ausgeführt wird.

System_CAPS_pubpropertyCurrentCulture

Ruft die Kultur für den aktuellen Thread ab oder legt diese fest.

System_CAPS_pubpropertySystem_CAPS_staticCurrentPrincipal

Ruft den aktuellen Prinzipal des Threads (für rollenbasierte Sicherheit) ab oder legt diesen fest.

System_CAPS_pubpropertySystem_CAPS_staticCurrentThread

Ruft den derzeit ausgeführten Thread ab.

System_CAPS_pubpropertyCurrentUICulture

Ruft die aktuelle Kultur ab, mit deren Hilfe der Ressourcen-Manager zur Laufzeit kulturabhängige Ressourcen sucht, oder legt diese fest.

System_CAPS_pubpropertyExecutionContext

Ruft ein ExecutionContext-Objekt ab, das Informationen zu den verschiedenen Kontexten des aktuellen Threads enthält.

System_CAPS_pubpropertyIsAlive

Ruft einen Wert ab, der den Ausführungsstatus des aktuellen Threads angibt.

System_CAPS_pubpropertyIsBackground

Ruft einen Wert ab, der angibt, ob es sich bei einem Thread um einen Hintergrundthread handelt, oder legt diesen fest.

System_CAPS_pubpropertyIsThreadPoolThread

Ruft einen Wert ab, der angibt, ob ein Thread zu dem verwalteten Threadpool gehört.

System_CAPS_pubpropertyManagedThreadId

Ruft einen eindeutigen Bezeichner für den aktuellen verwalteten Thread ab.

System_CAPS_pubpropertyName

Ruft den Namen des Threads ab oder legt diesen fest.

System_CAPS_pubpropertyPriority

Ruft einen Wert ab, der die Planungspriorität eines Threads angibt, oder legt diesen fest.

System_CAPS_pubpropertyThreadState

Ruft einen Wert ab, der die Zustände des aktuellen Threads enthält.

NameBeschreibung
System_CAPS_pubmethodAbort()

Löst eine ThreadAbortException im Thread aus, für den der Aufruf erfolgte, um das Beenden des Threads zu beginnen. Durch den Aufruf dieser Methode wird der Thread i. d. R. beendet.

System_CAPS_pubmethodAbort(Object^)

Löst eine ThreadAbortException im Thread aus, für den der Aufruf erfolgte, um das Beenden des Threads zu beginnen. Gleichzeitig werden Ausnahmeinformationen über das Beenden des Threads bereitgestellt. Durch den Aufruf dieser Methode wird der Thread i. d. R. beendet.

System_CAPS_pubmethodSystem_CAPS_staticAllocateDataSlot()

Reserviert einen unbenannten Datenslot für alle Threads. Eine höhere Leistung erzielen Sie, wenn Sie stattdessen Felder verwenden, die mit dem ThreadStaticAttribute-Attribut markiert sind.

System_CAPS_pubmethodSystem_CAPS_staticAllocateNamedDataSlot(String^)

Reserviert einen benannten Datenslot für alle Threads. Eine höhere Leistung erzielen Sie, wenn Sie stattdessen Felder verwenden, die mit dem ThreadStaticAttribute-Attribut markiert sind.

System_CAPS_pubmethodSystem_CAPS_staticBeginCriticalRegion()

Benachrichtigt einen Host, dass die Ausführung im Begriff ist, zu einem Codebereich überzugehen, in dem die Auswirkungen eines Threadabbruchs oder einer nicht behandelten Ausnahme andere Aufgaben in der Anwendungsdomäne gefährden könnten.

System_CAPS_pubmethodSystem_CAPS_staticBeginThreadAffinity()

Benachrichtigt einen Host, dass verwalteter Code im Begriff ist, Anweisungen auszuführen, die von der Identität des aktuellen physischen Betriebssystemthreads abhängen.

System_CAPS_pubmethodDisableComObjectEagerCleanup()

Deaktiviert die automatische Bereinigung von Runtime Callable Wrappern (RCW) für den aktuellen Thread.

System_CAPS_pubmethodSystem_CAPS_staticEndCriticalRegion()

Benachrichtigt einen Host, dass die Ausführung im Begriff ist, zu einem Codebereich überzugehen, in dem die Auswirkungen eines Threadabbruchs oder einer nicht behandelten Ausnahme auf die aktuelle Aufgabe beschränkt sind.

System_CAPS_pubmethodSystem_CAPS_staticEndThreadAffinity()

Benachrichtigt einen Host, dass verwalteter Code die Ausführung von Anweisungen beendet hat, die von der Identität des aktuellen physischen Betriebssystemthreads abhängen.

System_CAPS_pubmethodEquals(Object^)

Bestimmt, ob das angegebene Objekt mit dem aktuellen Objekt identisch ist.(Geerbt von „Object“.)

System_CAPS_protmethodFinalize()

Stellt das Freigeben von Ressourcen und das Ausführen anderer Garbage Collector-Vorgänge sicher, wenn der Garbage Collector das Thread-Objekt verarbeitet.(Überschreibt CriticalFinalizerObject::Finalize().)

System_CAPS_pubmethodSystem_CAPS_staticFreeNamedDataSlot(String^)

Entfernt die Zuordnung zwischen einem Namen und einem Slot für alle Threads in dem Prozess. Eine höhere Leistung erzielen Sie, wenn Sie stattdessen Felder verwenden, die mit dem ThreadStaticAttribute-Attribut markiert sind.

System_CAPS_pubmethodGetApartmentState()

Gibt einen ApartmentState-Wert zurück, der den Apartmentzustand angibt.

System_CAPS_pubmethodGetCompressedStack()

Veraltet.Gibt ein CompressedStack-Objekt zurück, mit dem der Stapel für den aktuellen Thread erfasst werden kann.

System_CAPS_pubmethodSystem_CAPS_staticGetData(LocalDataStoreSlot^)

Ruft in der aktuellen Domäne des aktuellen Threads den Wert aus dem angegebenen Slot für den aktuellen Thread ab. Eine höhere Leistung erzielen Sie, wenn Sie stattdessen Felder verwenden, die mit dem ThreadStaticAttribute-Attribut markiert sind.

System_CAPS_pubmethodSystem_CAPS_staticGetDomain()

Gibt die aktuelle Domäne zurück, in der der aktuelle Thread ausgeführt wird.

System_CAPS_pubmethodSystem_CAPS_staticGetDomainID()

Gibt einen eindeutigen Bezeichner der Anwendungsdomäne zurück.

System_CAPS_pubmethodGetHashCode()

Gibt einen Hashcode für den aktuellen Thread zurück.(Überschreibt Object::GetHashCode().)

System_CAPS_pubmethodSystem_CAPS_staticGetNamedDataSlot(String^)

Sucht einen benannten Datenslot. Eine höhere Leistung erzielen Sie, wenn Sie stattdessen Felder verwenden, die mit dem ThreadStaticAttribute-Attribut markiert sind.

System_CAPS_pubmethodGetType()

Ruft den Type der aktuellen Instanz ab.(Geerbt von „Object“.)

System_CAPS_pubmethodInterrupt()

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

System_CAPS_pubmethodJoin()

Blockiert den aufrufenden Thread, bis der durch diese Instanz dargestellte Thread beendet wird, während das Standard-COM- und das SendMessage-Pumping fortgesetzt werden.

System_CAPS_pubmethodJoin(Int32)

Blockiert den aufrufenden Thread, bis der von dieser Instanz dargestellte Thread beendet wird, oder die festgelegte Zeit verstreicht, während das Standard-COM- und das SendMessage-Pumping fortgesetzt werden.

System_CAPS_pubmethodJoin(TimeSpan)

Blockiert den aufrufenden Thread, bis der von dieser Instanz dargestellte Thread beendet wird, oder die festgelegte Zeit verstreicht, während das Standard-COM- und SendMessage-Pumping fortgesetzt werden.

System_CAPS_pubmethodSystem_CAPS_staticMemoryBarrier()

Der Prozessor, der den aktuellen Thread ausführt, kann Anweisungen nicht so neu anordnen, dass Speicherzugriffe vor dem Aufruf von MemoryBarrier nach Speicherzugriffen ausgeführt werden, die nach dem Aufruf von MemoryBarrier erfolgen.

System_CAPS_pubmethodSystem_CAPS_staticResetAbort()

Bricht ein Abort ab, das für den aktuellen Thread angefordert wurde.

System_CAPS_pubmethodResume()

Veraltet.Nimmt die Ausführung eines angehaltenen Threads wieder auf.

System_CAPS_pubmethodSetApartmentState(ApartmentState)

Legt den Apartmentzustand eines Threads fest, bevor dieser gestartet wird.

System_CAPS_pubmethodSetCompressedStack(CompressedStack^)

Veraltet.Übernimmt einen erfassten CompressedStack für den aktuellen Thread.

System_CAPS_pubmethodSystem_CAPS_staticSetData(LocalDataStoreSlot^, Object^)

Legt die Daten im angegebenen Slot auf den derzeit ausgeführten Thread und für die aktuelle Domäne des betreffenden Threads fest. Eine höhere Leistung erzielen Sie, wenn Sie stattdessen Felder verwenden, die mit dem ThreadStaticAttribute-Attribut markiert sind.

System_CAPS_pubmethodSystem_CAPS_staticSleep(Int32)

Hält den aktuellen Thread für die angegebene Anzahl von Millisekunden an.

System_CAPS_pubmethodSystem_CAPS_staticSleep(TimeSpan)

Hält den aktuellen Thread während des angegebenen Zeitraums an.

System_CAPS_pubmethodSystem_CAPS_staticSpinWait(Int32)

Veranlasst, dass ein Thread so oft wartet, wie vom iterations-Parameter definiert.

System_CAPS_pubmethodStart()

Weist das Betriebssystem an, den Zustand der aktuellen Instanz in ThreadState::Running zu ändern.

System_CAPS_pubmethodStart(Object^)

Bewirkt, dass das Betriebssystem den Zustand der aktuellen Instanz in ThreadState::Running ändert, und stellt optional ein Objekt mit Daten bereit, die von der vom Thread ausgeführten Methode verwendet werden sollen.

System_CAPS_pubmethodSuspend()

Veraltet.Hält den Thread an. Hat keine Auswirkungen, wenn der Thread bereits angehalten ist.

System_CAPS_pubmethodToString()

Gibt eine Zeichenfolge zurück, die das aktuelle Objekt darstellt.(Geerbt von „Object“.)

System_CAPS_pubmethodTrySetApartmentState(ApartmentState)

Legt den Apartmentzustand eines Threads fest, bevor dieser gestartet wird.

System_CAPS_pubmethodSystem_CAPS_staticVolatileRead(Byte%)

Liest den Wert eines Felds. Der Wert entspricht dem letzten von einem Prozessor in dem Computer geschriebenen Wert, unabhängig von der Anzahl der Prozessoren und dem Zustand des Prozessorcaches.

System_CAPS_pubmethodSystem_CAPS_staticVolatileRead(Double%)

Liest den Wert eines Felds. Der Wert entspricht dem letzten von einem Prozessor in dem Computer geschriebenen Wert, unabhängig von der Anzahl der Prozessoren und dem Zustand des Prozessorcaches.

System_CAPS_pubmethodSystem_CAPS_staticVolatileRead(Int16%)

Liest den Wert eines Felds. Der Wert entspricht dem letzten von einem Prozessor in dem Computer geschriebenen Wert, unabhängig von der Anzahl der Prozessoren und dem Zustand des Prozessorcaches.

System_CAPS_pubmethodSystem_CAPS_staticVolatileRead(Int32%)

Liest den Wert eines Felds. Der Wert entspricht dem letzten von einem Prozessor in dem Computer geschriebenen Wert, unabhängig von der Anzahl der Prozessoren und dem Zustand des Prozessorcaches.

System_CAPS_pubmethodSystem_CAPS_staticVolatileRead(Int64%)

Liest den Wert eines Felds. Der Wert entspricht dem letzten von einem Prozessor in dem Computer geschriebenen Wert, unabhängig von der Anzahl der Prozessoren und dem Zustand des Prozessorcaches.

System_CAPS_pubmethodSystem_CAPS_staticVolatileRead(IntPtr%)

Liest den Wert eines Felds. Der Wert entspricht dem letzten von einem Prozessor in dem Computer geschriebenen Wert, unabhängig von der Anzahl der Prozessoren und dem Zustand des Prozessorcaches.

System_CAPS_pubmethodSystem_CAPS_staticVolatileRead(Object^%)

Liest den Wert eines Felds. Der Wert entspricht dem letzten von einem Prozessor in dem Computer geschriebenen Wert, unabhängig von der Anzahl der Prozessoren und dem Zustand des Prozessorcaches.

System_CAPS_pubmethodSystem_CAPS_staticVolatileRead(SByte%)

Liest den Wert eines Felds. Der Wert entspricht dem letzten von einem Prozessor in dem Computer geschriebenen Wert, unabhängig von der Anzahl der Prozessoren und dem Zustand des Prozessorcaches.

System_CAPS_pubmethodSystem_CAPS_staticVolatileRead(Single%)

Liest den Wert eines Felds. Der Wert entspricht dem letzten von einem Prozessor in dem Computer geschriebenen Wert, unabhängig von der Anzahl der Prozessoren und dem Zustand des Prozessorcaches.

System_CAPS_pubmethodSystem_CAPS_staticVolatileRead(UInt16%)

Liest den Wert eines Felds. Der Wert entspricht dem letzten von einem Prozessor in dem Computer geschriebenen Wert, unabhängig von der Anzahl der Prozessoren und dem Zustand des Prozessorcaches.

System_CAPS_pubmethodSystem_CAPS_staticVolatileRead(UInt32%)

Liest den Wert eines Felds. Der Wert entspricht dem letzten von einem Prozessor in dem Computer geschriebenen Wert, unabhängig von der Anzahl der Prozessoren und dem Zustand des Prozessorcaches.

System_CAPS_pubmethodSystem_CAPS_staticVolatileRead(UInt64%)

Liest den Wert eines Felds. Der Wert entspricht dem letzten von einem Prozessor in dem Computer geschriebenen Wert, unabhängig von der Anzahl der Prozessoren und dem Zustand des Prozessorcaches.

System_CAPS_pubmethodSystem_CAPS_staticVolatileRead(UIntPtr%)

Liest den Wert eines Felds. Der Wert entspricht dem letzten von einem Prozessor in dem Computer geschriebenen Wert, unabhängig von der Anzahl der Prozessoren und dem Zustand des Prozessorcaches.

System_CAPS_pubmethodSystem_CAPS_staticVolatileWrite(Byte%, Byte)

Schreibt einen Wert sofort in ein Feld, sodass der Wert für alle Prozessoren des Computers sichtbar ist.

System_CAPS_pubmethodSystem_CAPS_staticVolatileWrite(Double%, Double)

Schreibt einen Wert sofort in ein Feld, sodass der Wert für alle Prozessoren des Computers sichtbar ist.

System_CAPS_pubmethodSystem_CAPS_staticVolatileWrite(Int16%, Int16)

Schreibt einen Wert sofort in ein Feld, sodass der Wert für alle Prozessoren des Computers sichtbar ist.

System_CAPS_pubmethodSystem_CAPS_staticVolatileWrite(Int32%, Int32)

Schreibt einen Wert sofort in ein Feld, sodass der Wert für alle Prozessoren des Computers sichtbar ist.

System_CAPS_pubmethodSystem_CAPS_staticVolatileWrite(Int64%, Int64)

Schreibt einen Wert sofort in ein Feld, sodass der Wert für alle Prozessoren des Computers sichtbar ist.

System_CAPS_pubmethodSystem_CAPS_staticVolatileWrite(IntPtr%, IntPtr)

Schreibt einen Wert sofort in ein Feld, sodass der Wert für alle Prozessoren des Computers sichtbar ist.

System_CAPS_pubmethodSystem_CAPS_staticVolatileWrite(Object^%, Object^)

Schreibt einen Wert sofort in ein Feld, sodass der Wert für alle Prozessoren des Computers sichtbar ist.

System_CAPS_pubmethodSystem_CAPS_staticVolatileWrite(SByte%, SByte)

Schreibt einen Wert sofort in ein Feld, sodass der Wert für alle Prozessoren des Computers sichtbar ist.

System_CAPS_pubmethodSystem_CAPS_staticVolatileWrite(Single%, Single)

Schreibt einen Wert sofort in ein Feld, sodass der Wert für alle Prozessoren des Computers sichtbar ist.

System_CAPS_pubmethodSystem_CAPS_staticVolatileWrite(UInt16%, UInt16)

Schreibt einen Wert sofort in ein Feld, sodass der Wert für alle Prozessoren des Computers sichtbar ist.

System_CAPS_pubmethodSystem_CAPS_staticVolatileWrite(UInt32%, UInt32)

Schreibt einen Wert sofort in ein Feld, sodass der Wert für alle Prozessoren des Computers sichtbar ist.

System_CAPS_pubmethodSystem_CAPS_staticVolatileWrite(UInt64%, UInt64)

Schreibt einen Wert sofort in ein Feld, sodass der Wert für alle Prozessoren des Computers sichtbar ist.

System_CAPS_pubmethodSystem_CAPS_staticVolatileWrite(UIntPtr%, UIntPtr)

Schreibt einen Wert sofort in ein Feld, sodass der Wert für alle Prozessoren des Computers sichtbar ist.

System_CAPS_pubmethodSystem_CAPS_staticYield()

Bewirkt, dass der aufrufende Thread die Ausführung an einen anderen Thread übergibt, der auf dem aktuellen Prozessor ausgeführt werden kann. Das Betriebssystem wählt den Thread für die Übergabe aus.

NameBeschreibung
System_CAPS_pubinterfaceSystem_CAPS_privmethod_Thread::GetIDsOfNames(Guid%, IntPtr, UInt32, UInt32, IntPtr)

Ordnet eine Reihe von Namen einer entsprechenden Reihe von Dispatchbezeichnern zu.

System_CAPS_pubinterfaceSystem_CAPS_privmethod_Thread::GetTypeInfo(UInt32, UInt32, IntPtr)

Ruft die Typinformationen für ein Objekt ab, die dann zum Abrufen der Typinformationen für eine Schnittstelle verwendet werden können.

System_CAPS_pubinterfaceSystem_CAPS_privmethod_Thread::GetTypeInfoCount(UInt32%)

Ruft die Anzahl der Schnittstellen mit Typinformationen ab, die von einem Objekt bereitgestellt werden (0 oder 1).

System_CAPS_pubinterfaceSystem_CAPS_privmethod_Thread::Invoke(UInt32, Guid%, UInt32, Int16, IntPtr, IntPtr, IntPtr, IntPtr)

Stellt den Zugriff auf von einem Objekt verfügbar gemachte Eigenschaften und Methoden bereit.

When a process starts, the common language runtime automatically creates a single foreground thread to execute application code. Along with this main foreground thread, a process can create one or more threads to execute a portion of the program code associated with the process. These threads can execute either in the foreground or in the background. In addition, you can use the T:System.Threading.ThreadPool class to execute code on worker threads that are managed by the common language runtime.

In this section

Starting a thread
Retrieving Thread objects
Foreground and background threads
Culture and threads
Getting information about and controlling threads
Accessing the source code for the Thread class

You start a thread by supplying a delegate that represents the method the thread is to execute in its class constructor. You then call the M:System.Threading.Thread.Start method to begin execution.

The T:System.Threading.Thread constructors can take either of two delegate types, depending on whether you can pass an argument to the method to be executed:

  • If the method has no arguments, you pass a T:System.Threading.ThreadStart delegate to the constructor. It has the signature:

    Derzeit ist kein Code Beispiel verfügbar, oder die Sprache wird nicht unterstützt.

    The following example creates and starts a thread that executes the ExecuteInForeground method. The method displays information about some thread properties, then executes a loop in which it pauses for half a second and displays the elapsed number of seconds. When the thread has executed for at least five seconds, the loop ends and the thread terminates execution.

    Derzeit ist kein Code Beispiel verfügbar, oder die Sprache wird nicht unterstützt.
  • If the method has an argument, you pass a T:System.Threading.ParameterizedThreadStart delegate to the constructor. It has the signature:

    Derzeit ist kein Code Beispiel verfügbar, oder die Sprache wird nicht unterstützt.

    The method executed by the delegate can then cast (in C#) or convert (in Visual Basic) the parameter to the appropriate type.

    The following example is identical to the previous one, except that it calls the M:System.Threading.Thread.#ctor(System.Threading.ParameterizedThreadStart) constructor. This version of the ExecuteInForeground method has a single parameter that represents the approximate number of milliseconds the loop is to execute.

    Derzeit ist kein Code Beispiel verfügbar, oder die Sprache wird nicht unterstützt.

It is not necessary to retain a reference to a T:System.Threading.Thread object once you have started the thread. The thread continues to execute until the thread procedure is complete.

You can use the static (Shared in Visual Basic) P:System.Threading.Thread.CurrentThread property to retrieve a reference to the currently executing thread from the code that the thread is executing. The following example uses the P:System.Threading.Thread.CurrentThread property to display information about the main application thread, another foreground thread, a background thread, and a thread pool thread.

Derzeit ist kein Code Beispiel verfügbar, oder die Sprache wird nicht unterstützt.

Instances of the T:System.Threading.Thread class represent either foreground threads or background threads. Background threads are identical to foreground threads with one exception: a background thread does not keep a process running if all foreground threads have terminated. Once all foreground threads have been stopped, the runtime stops all background threads and shuts down.

By default, the following threads execute in the foreground:

  • The main application thread.

  • All threads created by calling a T:System.Threading.Thread class constructor.

The following threads execute in the background by default:

  • Thread pool threads, which are a pool of worker threads maintained by the runtime. You can configure the thread pool and schedule work on thread pool threads by using the T:System.Threading.ThreadPool class.

    System_CAPS_noteHinweis

    Task-based asynchronous operations automatically execute on thread pool threads. Task-based asynchronous operations use the T:System.Threading.Tasks.Task and T:System.Threading.Tasks.Task`1 classes to implement the task-based asynchronous pattern.

  • All threads that enter the managed execution environment from unmanaged code.

You can change a thread to execute in the background by setting the P:System.Threading.Thread.IsBackground property at any time. Background threads are useful for any operation that should continue as long as an application is running but should not prevent the application from terminating, such as monitoring file system changes or incoming socket connections.

The following example illustrates the difference between foreground and background threads. It is like the first example in the Starting a thread section, except that it sets the thread to execute in the background before starting it. As the output shows, the loop is interrupted before it executes for five seconds.

Derzeit ist kein Code Beispiel verfügbar, oder die Sprache wird nicht unterstützt.

Each thread has a culture, represented by the P:System.Threading.Thread.CurrentCulture property, and a UI culture, represented by the P:System.Threading.Thread.CurrentUICulture property. The current culture supports such culture-sensitive operations as parsing and formatting, string comparison and sorting, and also controls the writing system and calendar used by a thread. The current UI culture provides for culture-sensitive retrieval of resources in resource files.

When a new thread is instantiated, its culture and UI culture are defined by the current system culture and UI culture, and not by the culture and UI culture of the thread from which the new thread is created. This means, for example, that if the current system culture is English (United States) and the current culture of the primary application thread is French (France), the culture of a new thread created by calling the M:System.Threading.Thread.#ctor(System.Threading.ParameterizedThreadStart) constructor from the primary thread is English (United States), and not French (France). For more information, see the "Culture and threads" section of the T:System.Globalization.CultureInfo class topic.

System_CAPS_importantWichtig

This is not true of threads that execute asynchronous operations for apps that target the net_v46 and later versions, In this case, the culture and UI culture is part of an asynchronous operations' context; the thread on which an asynchronous operation executes by default inherits the culture and UI culture of the thread from which the asynchronous operation was launched. For more information, see the "Culture and task-based asynchronous operations" section of the T:System.Globalization.CultureInfo class topic.

You can do either of the following to ensure that all of the threads executing in an application share the same culture and UI culture:

  • You can pass a T:System.Globalization.CultureInfo object that represents that culture to the T:System.Threading.ParameterizedThreadStart delegate or the M:System.Threading.ThreadPool.QueueUserWorkItem(System.Threading.WaitCallback,System.Object) method.

  • For apps running on the net_v45 and later versions, you can define the culture and UI culture that is to be assigned to all threads created in an application domain by setting the value of the P:System.Globalization.CultureInfo.DefaultThreadCurrentCulture and P:System.Globalization.CultureInfo.DefaultThreadCurrentUICulture properties. Note that this is a per-application domain setting.

For more information and examples, see the "Culture and threads" section of the T:System.Globalization.CultureInfo class topic.

You can retrieve a number of property values that provide information about a thread. In some cases, you can also set these property values to control the operation of the thread. These thread properties include:

  • A name. P:System.Threading.Thread.Name is a write-once property that you can use to identify a thread. Its default value is null.

  • A hash code, which you can retrieve by calling the M:System.Threading.Thread.GetHashCode method. The hash code can be used to uniquely identify a thread; for the lifetime of your thread, its hash code will not collide with the value from any other thread, regardless of the application domain from which you obtain the value.

  • A thread ID. The value of the read-only P:System.Threading.Thread.ManagedThreadId property is assigned by the runtime and uniquely identifies a thread within its process.

    System_CAPS_noteHinweis

    An operating-system ThreadIdhttps://msdn.microsoft.com/library/windows/desktop/ms683233.aspx has no fixed relationship to a managed thread, because an unmanaged host can control the relationship between managed and unmanaged threads. Specifically, a sophisticated host can use the CLR Hosting APIhttps://msdn.microsoft.com/library/ms404385.aspx to schedule many managed threads against the same operating system thread, or to move a managed thread between different operating system threads.

  • The thread's current state. For the duration of its existence, a thread is always in one or more of the states defined by the T:System.Threading.ThreadState property.

  • A scheduling priority level, which is defined by the T:System.Threading.ThreadPriority property. Although you can set this value to request a thread's priority, it is not guaranteed to be honored by the operating system.

  • The read-only P:System.Threading.Thread.IsThreadPoolThread property, which indicates whether a thread is a thread pool thread.

  • The P:System.Threading.Thread.IsBackground property. For more information, see the Foreground and background threads section.

To view the .NET Framework source code for the T:System.Threading.Thread class, see the Reference Sourcehttp://referencesource.microsoft.com/#mscorlib/system/threading/thread.cs#3980e012bae82e96. You can browse through the source code online, download the reference for offline viewing, and step through the sources (including patches and updates) during debugging; see instructionshttp://referencesource.microsoft.com/.

The following example demonstrates simple threading functionality.

// [C++]
// Compile using /clr option.
using namespace System;
using namespace System::Threading;

// Simple threading scenario:  Start a Shared method running
// on a second thread.
public ref class ThreadExample
{
public:

   // The ThreadProc method is called when the thread starts.
   // It loops ten times, writing to the console and yielding 
   // the rest of its time slice each time, and then ends.
   static void ThreadProc()
   {
      for ( int i = 0; i < 10; i++ )
      {
         Console::Write(  "ThreadProc: " );
         Console::WriteLine( i );

         // Yield the rest of the time slice.
         Thread::Sleep( 0 );

      }
   }

};

int main()
{
   Console::WriteLine( "Main thread: Start a second thread." );

   // Create the thread, passing a ThreadStart delegate that
   // represents the ThreadExample::ThreadProc method.  For a 
   // delegate representing a static method, no object is
   // required.
   Thread^ oThread = gcnew Thread( gcnew ThreadStart( &ThreadExample::ThreadProc ) );

   // Start ThreadProc.  Note that on a uniprocessor, the new 
   // thread does not get any processor time until the main thread 
   // is preempted or yields.  Uncomment the Thread::Sleep that 
   // follows oThread->Start() to see the difference.
   oThread->Start();

   //Thread::Sleep(0);
   for ( int i = 0; i < 4; i++ )
   {
      Console::WriteLine(  "Main thread: Do some work." );
      Thread::Sleep( 0 );

   }
   Console::WriteLine(  "Main thread: Call Join(), to wait until ThreadProc ends." );
   oThread->Join();
   Console::WriteLine(  "Main thread: ThreadProc.Join has returned.  Press Enter to end program." );
   Console::ReadLine();
   return 0;
}

This code produces output similar to the following:

[VB, C++, C#]
Main thread: Start a second thread.
Main thread: Do some work.
ThreadProc: 0
Main thread: Do some work.
ThreadProc: 1
Main thread: Do some work.
ThreadProc: 2
Main thread: Do some work.
ThreadProc: 3
Main thread: Call Join(), to wait until ThreadProc ends.
ThreadProc: 4
ThreadProc: 5
ThreadProc: 6
ThreadProc: 7
ThreadProc: 8
ThreadProc: 9
Main thread: ThreadProc.Join has returned.  Press Enter to end program.

.NET Framework
Verfügbar seit 1.1
Portierbare Klassenbibliothek
Unterstützt in: portierbare .NET-Plattformen
Silverlight
Verfügbar seit 2.0
Windows Phone Silverlight
Verfügbar seit 7.0

This type is thread safe.

Zurück zum Anfang
Anzeigen: