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.TrySetApartmentState-Methode: (ApartmentState)

 

Veröffentlicht: Oktober 2016

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
Type: System.Threading.ApartmentState

Der neue Apartmentzustand.

Rückgabewert

Type: System.Boolean

true, wenn der Apartmentzustand festgelegt wurde, andernfalls false.

Exception Condition
ArgumentException

state ist kein gültiger Apartmentzustand.

ThreadStateException

Der Thread wurde bereits gestartet.

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

System_CAPS_noteHinweis

Mit der Hauptanwendungsthread initialisiert ApartmentState.MTA standardmäßig. Die einzige Möglichkeit, legen Sie den Apartmentzustand des Hauptanwendungsthread auf ApartmentState.STA angewendet wird das STAThreadAttribute -Attribut auf die Einstiegspunktmethode.

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

Das folgende Codebeispiel veranschaulicht die GetApartmentState, SetApartmentState, und TrySetApartmentState Methoden. Im Codebeispiel wird einen Thread erstellt. Vor dem Starten des Threads GetApartmentState zeigt die anfängliche ApartmentState.Unknown Zustand und SetApartmentState ändert den Zustand auf ApartmentState.STA. Die TrySetApartmentState dann Methodenrückgabe false beim Versuch, den Status zu ändern ApartmentState.MTA da der Apartmentzustand bereits festgelegt ist. Bei der Ausführung des gleichen Vorgangs mit SetApartmentState, InvalidOperationException würde ausgelöst.

Nachdem der Thread gestartet wird, die TrySetApartmentState Methode erneut verwendet wird. Sie löst dieses Mal ThreadStateException 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
Verfügbar seit 2.0
Zurück zum Anfang
Anzeigen: