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

ApartmentState-Enumeration

 

Veröffentlicht: Oktober 2016

Gibt den Apartmentzustand eine Thread.

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

[SerializableAttribute]
[ComVisibleAttribute(true)]
public enum ApartmentState

MembernameBeschreibung
MTA

Die Thread erstellt und einem Multithread-Apartment.

STA

Die Thread erstellt und ein Singlethread-Apartment.

Unknown

Die ApartmentState -Eigenschaft nicht festgelegt wurde.

Ein Apartment ist ein logischer Container in einem Prozess die gleichen Thread zugriffsanforderungen. Alle Objekte im selben Apartment können Aufrufe von jedem Thread im Apartment empfangen. .NET Framework verwendet keine Apartments und verwaltete Objekte sind für die Verwendung aller freigegebenen Ressourcen auf eine threadsichere Weise selbst verantwortlich.

Da die COM-Klassen Apartments verwenden, muss die common Language Runtime erstellt und initialisiert ein Apartment beim Aufruf eines COM-Objekts in einer COM-Interop-Situation. Ein verwalteter Thread erstellen und geben Sie ein Singlethread-Apartment (STA), das nur ein Thread ermöglicht oder einem Multithread-Apartment (MTA), die einem oder mehreren Threads enthält. Sie können steuern, welche Apartment erstellt, indem die ApartmentState -Eigenschaft des Threads auf einen der Werte von der ApartmentState Enumeration. Da ein bestimmter Thread ein COM-Apartment nur einmal initialisieren kann, können keine Sie den Apartment nach dem ersten Aufruf von nicht verwaltetem Code ändern.

Weitere Informationen finden Sie unter Thread, verwaltet und nicht verwaltetes Threading, und Erweiterte COM-Interoperabilität.

Im folgenden Codebeispiel wird veranschaulicht, wie den Apartmentzustand eines Threads fest.

using System;
using System.Threading;

class ApartmentTest
{
    static void Main()
    {
        Thread newThread = 
            new Thread(new ThreadStart(ThreadMethod));
        newThread.SetApartmentState(ApartmentState.MTA);

        Console.WriteLine("ThreadState: {0}, ApartmentState: {1}", 
            newThread.ThreadState, newThread.ApartmentState);

        newThread.Start();

        // Wait for newThread to start and go to sleep.
        Thread.Sleep(300);
        try
        {
            // This causes an exception since newThread is sleeping.
            newThread.SetApartmentState(ApartmentState.STA);
        }
        catch(ThreadStateException stateException)
        {
            Console.WriteLine("\n{0} caught:\n" +
                "Thread is not in the Unstarted or Running state.", 
                stateException.GetType().Name);
            Console.WriteLine("ThreadState: {0}, ApartmentState: {1}",
                newThread.ThreadState, newThread.GetApartmentState());
        }
    }

    static void ThreadMethod()
    {
        Thread.Sleep(1000);
    }
}

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