Thread.ApartmentState Thread.ApartmentState Thread.ApartmentState Thread.ApartmentState Property

Definición

Advertencia

Esta API está ya obsoleta.

Obtiene o establece el estado de apartamento de este subproceso.Gets or sets the apartment state of this thread.

public:
 property System::Threading::ApartmentState ApartmentState { System::Threading::ApartmentState get(); void set(System::Threading::ApartmentState value); };
[System.Obsolete("Deprecated in favor of GetApartmentState, SetApartmentState and TrySetApartmentState.")]
[System.Obsolete("The ApartmentState property has been deprecated.  Use GetApartmentState, SetApartmentState or TrySetApartmentState instead.", false)]
public System.Threading.ApartmentState ApartmentState { get; set; }
member this.ApartmentState : System.Threading.ApartmentState with get, set
Public Property ApartmentState As ApartmentState

Valor de propiedad

Uno de los valores de ApartmentState.One of the ApartmentState values. El valor inicial es Unknown.The initial value is Unknown.

Excepciones

Se realiza un intento de establecer esta propiedad en un estado que no es un estado de contenedor válido (un estado distinto de contenedor uniproceso (STA) o contenedor multiproceso (MTA)).An attempt is made to set this property to a state that is not a valid apartment state (a state other than single-threaded apartment (STA) or multithreaded apartment (MTA)).

Ejemplos

En el ejemplo de código siguiente se muestra cómo establecer el estado de apartamento de un subproceso.The following code example demonstrates how to set the apartment state of a thread.

using namespace System;
using namespace System::Threading;
ref class ApartmentTest
{
public:
   static void ThreadMethod()
   {
      Thread::Sleep( 1000 );
   }

};

int main()
{
   Thread^ newThread = gcnew Thread( gcnew ThreadStart( &ApartmentTest::ThreadMethod ) );
   newThread->SetApartmentState(ApartmentState::MTA);
   
   Console::WriteLine( "ThreadState: {0}, ApartmentState: {1}", newThread->ThreadState.ToString(), newThread->GetApartmentState().ToString() );
   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.ToString(), newThread->GetApartmentState().ToString() );
   }

}

using System;
using System.Threading;

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

        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);
    }
}
Imports System.Threading

Public Class ApartmentTest

    <MTAThread> _
    Shared Sub Main()
    
        Dim newThread As Thread = New Thread(AddressOf ThreadMethod)
        newThread.SetApartmentState(ApartmentState.MTA)

        Console.WriteLine("ThreadState: {0}, ApartmentState: {1}", _
            newThread.ThreadState, newThread.GetApartmentState())

        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 stateException As ThreadStateException
            Console.WriteLine(vbCrLf & "{0} caught:" & vbCrLf & _
                "Thread is not In the Unstarted or Running state.", _
                stateException.GetType().Name)
            Console.WriteLine("ThreadState: {0}, ApartmentState: " & _
                "{1}", newThread.ThreadState, newThread.GetApartmentState())
        End Try

    End Sub

    Shared Sub ThreadMethod()
        Thread.Sleep(1000)
    End Sub

End Class

Comentarios

La ApartmentState propiedad está obsoleta.The ApartmentState property is obsolete. Las alternativas no obsoletas son el GetApartmentState método para recuperar el estado del apartamento y el SetApartmentState método para establecer el estado del apartamento.The non-obsolete alternatives are the GetApartmentState method to retrieve the apartment state and the SetApartmentState method to set the apartment state.

En las versiones 1,0 y 1,1 de .NET Framework, ApartmentState la propiedad marca un subproceso para indicar que se ejecutará en un contenedor uniproceso o multiproceso.In the .NET Framework versions 1.0 and 1.1, the ApartmentState property marks a thread to indicate that it will execute in a single-threaded or multithreaded apartment. Esta propiedad se puede establecer cuando el subproceso está en Unstarted el Running estado o del subproceso; sin embargo, solo se puede establecer una vez para un subproceso.This property can be set when the thread is in the Unstarted or Running thread state; however, it can be set only once for a thread. Si no se ha establecido la propiedad, devuelve Unknown.If the property has not been set, it returns Unknown.

Se omite el intento de ApartmentState utilizar la propiedad para establecer el estado de apartamento de un subproceso cuyo estado de apartamento ya se haya establecido.An attempt to use the ApartmentState property to set the apartment state of a thread whose apartment state has already been set is ignored. Sin embargo, SetApartmentState el método produce una InvalidOperationException excepción en este caso.However, the SetApartmentState method throws a InvalidOperationException in this case.

Importante

En la .NET Framework versión 2,0, los nuevos subprocesos se ApartmentState.MTA inicializan como si su estado de apartamento no se hubiera establecido antes de iniciarse.In the .NET Framework version 2.0, new threads are initialized as ApartmentState.MTA if their apartment state has not been set before they are started. 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. Ya no se puede establecer el subproceso de aplicación ApartmentState.STA principal en estableciendo System.Threading.ApartmentState la propiedad en la primera línea de código.You can no longer set the main application thread to ApartmentState.STA by setting the System.Threading.ApartmentState property on the first line of code. STAThreadAttribute Use en su lugar.Use the STAThreadAttribute instead.

En la versión .NET Framework 2,0, puede especificar el modelo de subprocesos COM para C++ una aplicación mediante la opción del enlazador /CLRTHREADATTRIBUTE (establecer el atributo de subproceso de CLR) .In the .NET Framework version 2.0, you can specify the COM threading model for a C++ application using the /CLRTHREADATTRIBUTE (Set CLR Thread Attribute) linker option.

Se aplica a

Consulte también: