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

Définition

Avertissement

Cette API est désormais obsolète.

Obtient ou définit l'état de cloisonnement de ce 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

Valeur de propriété

Une des valeurs de l'objet ApartmentState.One of the ApartmentState values. La valeur initiale est Unknown.The initial value is Unknown.

Exceptions

Une tentative est effectuée pour définir cette propriété sur un état qui n’est pas un état de cloisonnement valide (un état autre que celui de thread unique cloisonné (STA) ou de multithread cloisonné (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)).

Exemples

L’exemple de code suivant montre comment définir l’état de cloisonnement d’un 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

Remarques

La propriété ApartmentState est obsolète.The ApartmentState property is obsolete. Les alternatives non obsolètes sont la méthode GetApartmentState pour récupérer l’état de cloisonnement et la méthode SetApartmentState pour définir l’état de cloisonnement.The non-obsolete alternatives are the GetApartmentState method to retrieve the apartment state and the SetApartmentState method to set the apartment state.

Dans les versions 1,0 et 1,1 du .NET Framework, la propriété ApartmentState marque un thread pour indiquer qu’il s’exécutera dans un thread unique cloisonné ou multithread.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. Cette propriété peut être définie lorsque le thread se trouve dans l’état du thread Unstarted ou Running ; Toutefois, il ne peut être défini qu’une seule fois pour un 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. Si la propriété n’a pas été définie, elle retourne Unknown.If the property has not been set, it returns Unknown.

Une tentative d’utilisation de la propriété ApartmentState pour définir l’état de cloisonnement d’un thread dont l’état de cloisonnement a déjà été défini est ignorée.An attempt to use the ApartmentState property to set the apartment state of a thread whose apartment state has already been set is ignored. Toutefois, la méthode SetApartmentState lève une InvalidOperationException dans ce cas.However, the SetApartmentState method throws a InvalidOperationException in this case.

Important

Dans la version de .NET Framework 2,0, les nouveaux threads sont initialisés comme ApartmentState.MTA si leur état de cloisonnement n’a pas été défini avant de démarrer.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. Le thread d’application principal est initialisé à ApartmentState.MTA par défaut.The main application thread is initialized to ApartmentState.MTA by default. Vous ne pouvez plus définir le thread d’application principal sur ApartmentState.STA en définissant la propriété System.Threading.ApartmentState sur la première ligne de code.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. Utilisez plutôt le STAThreadAttribute.Use the STAThreadAttribute instead.

Dans la version 2,0 de .NET Framework, vous pouvez spécifier le modèle de thread COM d' C++ une application à l’aide de l’option de l’éditeur de liens /CLRTHREADATTRIBUTE (définir l’attribut 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.

S’applique à

Voir aussi