Thread.TrySetApartmentState(ApartmentState) Thread.TrySetApartmentState(ApartmentState) Thread.TrySetApartmentState(ApartmentState) Thread.TrySetApartmentState(ApartmentState) Method

Definición

Establece el estado del apartamento de un subproceso antes de iniciarse.Sets the apartment state of a thread before it is started.

public:
 bool TrySetApartmentState(System::Threading::ApartmentState state);
public bool TrySetApartmentState (System.Threading.ApartmentState state);
member this.TrySetApartmentState : System.Threading.ApartmentState -> bool
Public Function TrySetApartmentState (state As ApartmentState) As Boolean

Parámetros

state
ApartmentState ApartmentState ApartmentState ApartmentState

Nuevo estado del apartamento.The new apartment state.

Devoluciones

true si se ha establecido el estado del apartamento; en caso contrario, false.true if the apartment state is set; otherwise, false.

Excepciones

Solo .NET Core: este miembro no se admite en las plataformas macOS y Linux..NET Core only: This member is not supported on the macOS and Linux platforms.

state no es un estado del apartamento válido.state is not a valid apartment state.

El subproceso se ha iniciado y se ha terminado, o bien la llamada no se está realizando desde el contexto del subproceso mientras se está ejecutando el subproceso.The thread was started and has terminated, or the call is not being made from the thread's context while the thread is running.

Ejemplos

En el ejemplo de código siguiente GetApartmentStatese SetApartmentStatemuestran los TrySetApartmentState métodos, y.The following code example demonstrates the GetApartmentState, SetApartmentState, and TrySetApartmentState methods. En el ejemplo de código se crea un subproceso.The code example creates a thread. Antes de que se inicie el GetApartmentState subproceso, ApartmentState.Unknown muestra el SetApartmentState estado inicial y cambia ApartmentState.STAel estado a.Before the thread is started, GetApartmentState displays the initial ApartmentState.Unknown state and SetApartmentState changes the state to ApartmentState.STA. Después TrySetApartmentState , el método false devuelve al intentar cambiar el estado a ApartmentState.MTA porque ya está establecido el estado del apartamento.The TrySetApartmentState method then returns false when attempting to change the state to ApartmentState.MTA because the apartment state is already set. Si se ha intentado la misma operación con SetApartmentState, InvalidOperationException se habrían producido.If the same operation had been attempted with SetApartmentState, InvalidOperationException would have been thrown.

Una vez iniciado el subproceso, TrySetApartmentState se usa de nuevo el método.After the thread is started, the TrySetApartmentState method is used again. Esta vez, se produce ThreadStateException porque el subproceso ya se ha iniciado.This time it throws ThreadStateException because the thread has already been started.

using namespace System;
using namespace System::Threading;

void ThreadProc()
{
    Thread::Sleep(2000);
};

void main()
{
    Thread^ t = gcnew Thread(gcnew ThreadStart(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();
}

/* 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.
 */
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.
 */
Imports System
Imports System.Threading

Module Example

    Sub Main()
 
        Dim t As New Thread(AddressOf ThreadProc)
        Console.WriteLine("Before setting apartment state: {0}", _
            t.GetApartmentState())

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

        Dim result As Boolean = _
            t.TrySetApartmentState(ApartmentState.MTA)
        Console.WriteLine("Try to change state: {0}", result)

        t.Start()

        Thread.Sleep(500)

        Try
            t.TrySetApartmentState(ApartmentState.STA)
        Catch ex As ThreadStateException
            Console.WriteLine("ThreadStateException occurs " & _
                "if apartment state is set after starting thread.")
        End Try

        t.Join()
    End Sub

    Sub ThreadProc()
        Thread.Sleep(2000)
    End Sub
End Module

' 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.

Comentarios

Los nuevos subprocesos se ApartmentState.MTA inicializan como si su estado de apartamento no se hubiera establecido antes de iniciarse.New threads are initialized as ApartmentState.MTA if their apartment state has not been set before they are started. El estado de apartamento debe establecerse antes de iniciar un subproceso.Apartment state must be set before a thread is started.

Nota

El subproceso de aplicación principal se inicializa ApartmentState.MTA de forma predeterminada en.The main application thread is initialized to ApartmentState.MTA by default. La única manera de establecer el estado del apartamento del subproceso de aplicación ApartmentState.STA principal en es aplicar STAThreadAttribute el atributo al método de punto de entrada.The only way to set the apartment state of the main application thread to ApartmentState.STA is to apply the STAThreadAttribute attribute to the entry point method.

El TrySetApartmentState método, junto con el GetApartmentState método y el SetApartmentState método, reemplaza la ApartmentState propiedad.The TrySetApartmentState method, along with the GetApartmentState method and the SetApartmentState method, replaces the ApartmentState property.

Se aplica a