Thread.ApartmentState Propiedad

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.

Atributos

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 propiedad ApartmentState está obsoleta.The ApartmentState property is obsolete. Las alternativas no obsoletas son el método GetApartmentState para recuperar el estado del apartamento y el método SetApartmentState 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, la propiedad ApartmentState 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 el estado de subproceso Unstarted o Running; 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 usar la propiedad ApartmentState 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, el método SetApartmentState produce una InvalidOperationException 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 inicializan como ApartmentState.MTA si su estado de apartamento no se ha establecido antes de que se inicien.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 principal de la aplicación se inicializa en ApartmentState.MTA de forma predeterminada.The main application thread is initialized to ApartmentState.MTA by default. Ya no se puede establecer el subproceso de aplicación principal en ApartmentState.STA estableciendo la propiedad System.Threading.ApartmentState 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. En su lugar, use el STAThreadAttribute.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: