Este artículo se tradujo automáticamente. Para ver el artículo en inglés, active la casilla Inglés. Además, puede mostrar el texto en inglés en una ventana emergente si mueve el puntero del mouse sobre el texto.
Traducción
Inglés

Thread::TrySetApartmentState (Método) (ApartmentState)

 

Establece el estado del apartamento de un subproceso antes de iniciarse.

Espacio de nombres:   System.Threading
Ensamblado:  mscorlib (en mscorlib.dll)

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

Parámetros

state
Type: System.Threading::ApartmentState

Nuevo estado del apartamento.

Valor devuelto

Type: System::Boolean

true si se ha establecido el estado del apartamento; en caso contrario, false.

Exception Condition
ArgumentException

state no es un estado del apartamento válido.

ThreadStateException

Ya se inició el subproceso.

Los nuevos subprocesos se inicializan como ApartmentState::MTA Si no se ha establecido su estado de apartamento antes de que se inicien. Estado del apartamento se debe establecer antes de iniciar un subproceso.

System_CAPS_noteNota

El subproceso de aplicación principal se inicializa en ApartmentState::MTA de forma predeterminada. La única manera de establecer el estado de apartamento del subproceso principal de la aplicación para ApartmentState::STA es aplicar el STAThreadAttribute atributo al método de punto de entrada.

El TrySetApartmentState (método), junto con el GetApartmentState (método) y el SetApartmentState método, reemplaza el ApartmentState propiedad.

En el ejemplo de código siguiente se muestra el GetApartmentState, SetApartmentState, y TrySetApartmentState métodos. El ejemplo de código crea un subproceso. Antes de iniciar el subproceso, GetApartmentState muestra inicial ApartmentState::Unknown estado y SetApartmentState cambia el estado a ApartmentState::STA. El TrySetApartmentState a continuación, devuelve el método false al intentar cambiar el estado a ApartmentState::MTA porque el estado de apartamento ya está establecido. Si hubiera intentado la misma operación SetApartmentState, InvalidOperationException habría iniciado.

Cuando se haya iniciado el subproceso del TrySetApartmentState método se utiliza de nuevo. Esta vez produce ThreadStateException porque ya se ha iniciado el subproceso.

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.
 */

.NET Framework
Disponible desde 2.0
Volver al principio
Mostrar: