(0) exportieren Drucken
Alle erweitern
Erweitern Minimieren
Dieser Artikel wurde maschinell übersetzt. Bewegen Sie den Mauszeiger über die Sätze im Artikel, um den Originaltext anzuzeigen. Weitere Informationen
Übersetzung
Original

ApartmentState-Enumeration

Gibt den Apartmentzustand eines Thread an.

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

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

MembernameBeschreibung
MTADer Thread erstellt ein MTA (Multithreaded Apartment) und wird in dieses aufgenommen.
STADer Thread erstellt ein STA (Singlethreaded Apartment) und wird in dieses aufgenommen.
UnknownDie ApartmentState-Eigenschaft wurde nicht festgelegt.

Ein Apartment ist ein logischer Container in einem Prozess. Es enthält Objekte, für die dieselben Anforderungen an den Threadzugriff gelten. Alle Objekte in einem Apartment können Aufrufe von jedem Thread im Apartment empfangen. In .NET Framework werden keine Apartments verwendet, und verwaltete Objekte sind selbst für die threadsichere Verwendung aller freigegebenen Ressourcen verantwortlich.

Da COM-Klassen Apartments verwenden, muss die Common Language Runtime beim Aufrufen eines COM-Objekts in einer COM-Interop-Situation ein Apartment erstellen und initialisieren. Ein verwalteter Thread kann ein STA (Singlethreaded Apartment) oder ein MTA (Multithreaded Apartment) erstellen und darin aufgenommen werden. Ein STA enthält nur einen Thread, ein MTA dagegen einen oder mehrere. Sie können den Typ des erstellten Apartments steuern, indem Sie die ApartmentState-Eigenschaft des Threads auf einen der Werte der ApartmentState-Enumeration festlegen. Da ein angegebener Thread ein COM-Apartment jeweils nur einmal initialisieren kann, können Sie den Apartmenttyp nach dem ersten Aufruf des nicht verwalteten Codes nicht mehr ändern.

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

Das folgende Codebeispiel veranschaulicht das Festlegen des Apartmentzustands eines Threads.


using System;
using System.Threading;

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

        // The following line is ignored since 
        // ApartmentState can only be set once.
        newThread.SetApartmentState(ApartmentState.STA);

        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

Unterstützt in: 4.5, 4, 3.5, 3.0, 2.0, 1.1, 1.0

.NET Framework Client Profile

Unterstützt in: 4, 3.5 SP1

Windows 8.1, Windows Server 2012 R2, Windows 8, Windows Server 2012, Windows 7, Windows Vista SP2, Windows Server 2008 (Server Core-Rolle wird nicht unterstützt), Windows Server 2008 R2 (Server Core-Rolle wird mit SP1 oder höher unterstützt; Itanium wird nicht unterstützt)

Es werden nicht alle Versionen sämtlicher Plattformen von .NET Framework unterstützt.. Eine Liste der unterstützten Versionen finden Sie unter Systemanforderungen für .NET Framework.

Community-Beiträge

HINZUFÜGEN
Anzeigen:
© 2014 Microsoft