Thread.ApartmentState Proprietà

Definizione

Avviso

Questa API è ora obsoleta.

Ottiene o imposta lo stato dell'apartment del 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

Valore della proprietà

Uno dei valori di ApartmentState.One of the ApartmentState values. Il valore iniziale è Unknown.The initial value is Unknown.

Attributi

Eccezioni

Viene effettuato un tentativo di impostare questa proprietà su uno stato che non è uno stato dell'apartment valido (uno stato diverso da apartment a thread singolo (STA) o apartment con multithreading (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)).

Esempi

Nell'esempio di codice riportato di seguito viene illustrato come impostare lo stato dell'Apartment di 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

Commenti

La proprietà ApartmentState è obsoleta.The ApartmentState property is obsolete. Le alternative non obsolete sono il metodo GetApartmentState per recuperare lo stato dell'Apartment e il metodo SetApartmentState per impostare lo stato dell'Apartment.The non-obsolete alternatives are the GetApartmentState method to retrieve the apartment state and the SetApartmentState method to set the apartment state.

Nelle versioni .NET Framework 1,0 e 1,1, la proprietà ApartmentState contrassegna un thread per indicare che verrà eseguito in un Apartment a thread singolo o a thread multipli.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. Questa proprietà può essere impostata quando il thread è nello stato del thread Unstarted o Running; Tuttavia, può essere impostata una sola volta per 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. Se la proprietà non è stata impostata, restituisce Unknown.If the property has not been set, it returns Unknown.

Il tentativo di utilizzare la proprietà ApartmentState per impostare lo stato dell'Apartment di un thread il cui stato Apartment è già stato impostato viene ignorato.An attempt to use the ApartmentState property to set the apartment state of a thread whose apartment state has already been set is ignored. Tuttavia, in questo caso il metodo SetApartmentState genera un InvalidOperationException.However, the SetApartmentState method throws a InvalidOperationException in this case.

Importante

Nel .NET Framework versione 2,0, i nuovi thread vengono inizializzati come ApartmentState.MTA se lo stato dell'Apartment non è stato impostato prima dell'avvio.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. Il thread dell'applicazione principale viene inizializzato per impostazione predefinita ApartmentState.MTA.The main application thread is initialized to ApartmentState.MTA by default. Non è più possibile impostare il thread dell'applicazione principale su ApartmentState.STA impostando la proprietà System.Threading.ApartmentState sulla prima riga di codice.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. In alternativa, usare STAThreadAttribute.Use the STAThreadAttribute instead.

Nella versione .NET Framework 2,0 è possibile specificare il modello di threading COM per un' C++ applicazione usando l'opzione del linker /CLRTHREADATTRIBUTE (Set CLR Thread Attribute) .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.

Si applica a

Vedi anche