Thread.ApartmentState Propriedade

Definição

Aviso

Esta API agora é obsoleta.

Obtém ou define o estado de apartment desse thread.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 da propriedade

Um dos valores de ApartmentState.One of the ApartmentState values. O valor inicial é Unknown.The initial value is Unknown.

Atributos

Exceções

É feita uma tentativa de definir esta propriedade para um estado que não é um estado de apartment válido (um estado diferente de STA (single-threaded apartment) ou MTA (multithreaded apartment)).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)).

Exemplos

O exemplo de código a seguir demonstra como definir o estado de apartment de um thread.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

Comentários

A propriedade ApartmentState é obsoleta.The ApartmentState property is obsolete. As alternativas não obsoletas são o método GetApartmentState para recuperar o estado do apartamento e o método SetApartmentState para definir o estado do apartamento.The non-obsolete alternatives are the GetApartmentState method to retrieve the apartment state and the SetApartmentState method to set the apartment state.

No .NET Framework versões 1,0 e 1,1, a propriedade ApartmentState marca um thread para indicar que ele será executado em um apartamento de thread único ou multi-threaded.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. Essa propriedade pode ser definida quando o thread está no estado de thread Unstarted ou Running; no entanto, ele pode ser definido apenas uma vez para um thread.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. Se a propriedade não tiver sido definida, ela retornará Unknown.If the property has not been set, it returns Unknown.

Uma tentativa de usar a propriedade ApartmentState para definir o estado de apartment de um thread cujo estado apartment já foi definido é ignorado.An attempt to use the ApartmentState property to set the apartment state of a thread whose apartment state has already been set is ignored. No entanto, o método SetApartmentState gera um InvalidOperationException nesse caso.However, the SetApartmentState method throws a InvalidOperationException in this case.

Importante

Na versão .NET Framework 2,0, novos threads são inicializados como ApartmentState.MTA se o estado apartment não tiver sido definido antes de serem iniciados.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. O thread do aplicativo principal é inicializado para ApartmentState.MTA por padrão.The main application thread is initialized to ApartmentState.MTA by default. Você não pode mais definir o thread do aplicativo principal para ApartmentState.STA definindo a propriedade System.Threading.ApartmentState na primeira linha 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. Em vez disso, use o STAThreadAttribute.Use the STAThreadAttribute instead.

No .NET Framework versão 2,0, você pode especificar o modelo de Threading COM para um C++ aplicativo usando a opção de vinculador /CLRTHREADATTRIBUTE (definir atributo de thread 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.

Aplica-se a

Veja também