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

Thread.TrySetApartmentState-Methode

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

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

[HostProtectionAttribute(SecurityAction.LinkDemand, Synchronization = true, 
	SelfAffectingThreading = true)]
public bool TrySetApartmentState(
	ApartmentState state
)

Parameter

state
Typ: System.Threading.ApartmentState
Der neue Apartmentzustand.

Rückgabewert

Typ: System.Boolean
true , wenn der Apartmentzustand festgelegt wurde, andernfalls false.

AusnahmeBedingung
ArgumentException

state ist kein gültiger Apartmentzustand.

ThreadStateException

Der Thread wurde bereits gestartet.

Neue Threads werden als ApartmentState.MTA initialisiert, wenn ihr Apartmentzustand vor dem Starten nicht festgelegt wurde. Der Apartmentzustand muss festgelegt werden, bevor ein Thread gestartet wird.

HinweisHinweis

Der Hauptanwendungsthread wird standardmäßig mit ApartmentState.MTA initialisiert. Der Apartmentzustand des Hauptanwendungsthreads kann nur auf ApartmentState.STA festgelegt werden, indem das STAThreadAttribute-Attribut auf die Einstiegspunktmethode angewendet wird.

Die TrySetApartmentState-Methode ersetzt zusammen mit der GetApartmentState-Methode und der SetApartmentState-Methode die ApartmentState-Eigenschaft.

HinweisHinweis

Das HostProtectionAttribute -Attribut, das auf diesen Typ oder Member angewendet wird, besitzt den folgenden Resources Eigenschaftswert: Synchronization | SelfAffectingThreading. Das HostProtectionAttribute hat keine Auswirkungen auf Desktopanwendungen (die normalerweise durch Doppelklicken auf ein Symbol, Eingeben eines Befehls oder einer URL in einem Browser gestartet werden). Weitere Informationen finden Sie unter HostProtectionAttribute -Klasse oder SQL Server-Programmierung und Hostschutzattribute.

Im folgenden Codebeispiel werden die Methoden GetApartmentState, SetApartmentState und TrySetApartmentState veranschaulicht. Im Codebeispiel wird ein Thread erstellt. Vor dem Starten des Threads zeigt GetApartmentState den ursprünglichen ApartmentState.Unknown-Zustand an, und SetApartmentState ändert den Zustand auf ApartmentState.STA. Die TrySetApartmentState-Methode gibt bei dem Versuch, den Zustand auf ApartmentState.MTA zu ändern, false zurück, da der Apartmentzustand bereits festgelegt wurde. Bei der Ausführung des gleichen Vorgangs mit SetApartmentState würde eine InvalidOperationException ausgelöst werden.

Nach dem Starten des Threads wird erneut die TrySetApartmentState-Methode verwendet. Sie löst dieses Mal eine ThreadStateException aus, da der Thread bereits gestartet wurde.


using System;
using System.Threading;

class Example
{
    public static void Main()
    {
        Thread t = new Thread(ThreadProc);
        Console.WriteLine("Before setting apartment state: {0}", 
            t.GetApartmentState());

        t.SetApartmentState(ApartmentState.STA);
        Console.WriteLine("After setting apartment state: {0}", 
            t.GetApartmentState());

        bool result = t.TrySetApartmentState(ApartmentState.MTA);
        Console.WriteLine("Try to change state: {0}", result);

        t.Start();

        Thread.Sleep(500);

        try
        {
            t.TrySetApartmentState(ApartmentState.STA);
        }
        catch (ThreadStateException)
        {
            Console.WriteLine("ThreadStateException occurs " +
                "if apartment state is set after starting thread.");
        }

        t.Join();
    }

    public static void ThreadProc()
    {
        Thread.Sleep(2000);
    }
}

/* This code example produces the following output:

Before setting apartment state: Unknown
After setting apartment state: STA
Try to change state: False
ThreadStateException occurs if apartment state is set after starting thread.
 */


.NET Framework

Unterstützt in: 4.5, 4, 3.5, 3.0, 2.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