ApartmentState Sabit listesi

Tanım

Bir Thread'nin apartman durumunu belirtir.

public enum class ApartmentState
public enum ApartmentState
[System.Serializable]
public enum ApartmentState
[System.Serializable]
[System.Runtime.InteropServices.ComVisible(true)]
public enum ApartmentState
type ApartmentState = 
[<System.Serializable>]
type ApartmentState = 
[<System.Serializable>]
[<System.Runtime.InteropServices.ComVisible(true)>]
type ApartmentState = 
Public Enum ApartmentState
Devralma
ApartmentState
Öznitelikler

Alanlar

MTA 1

, Thread çok iş parçacıklı bir daire oluşturur ve girer.

STA 0

, Thread tek iş parçacıklı bir daire oluşturur ve girer.

Unknown 2

ApartmentState özelliği ayarlanmadı.

Örnekler

Aşağıdaki kod örneği, bir iş parçacığının apartman durumunun nasıl ayarlandığını gösterir.

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.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(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

Açıklamalar

Bir daire, aynı iş parçacığı erişim gereksinimlerini paylaşan nesneler için bir işlem içindeki mantıksal kapsayıcıdır. Aynı apartmandaki tüm nesneler, dairedeki herhangi bir yazışmadan çağrı alabilir. .NET Framework daireler kullanmaz ve yönetilen nesneler tüm paylaşılan kaynakları iş parçacığı açısından güvenli bir şekilde kullanmakla sorumludur.

COM sınıfları daireler kullandığından, ortak dil çalışma zamanının COM birlikte çalışma durumunda bir COM nesnesi çağırırken bir daire oluşturması ve başlatması gerekir. Yönetilen iş parçacığı, yalnızca bir iş parçacığına veya bir veya daha fazla iş parçacığı içeren çok iş parçacıklı bir daireye (MTA) izin veren tek iş parçacıklı bir daire (STA) oluşturabilir ve girebilir. İş parçacığının özelliğini sabit listesi değerlerinden birine ayarlayarak ApartmentState oluşturulan daire türünü ApartmentState denetleyebilirsiniz. Belirli bir iş parçacığı bir COM dairesini yalnızca bir kez başlatabileceğinden, yönetilmeyen koda yapılan ilk çağrıdan sonra daire türünü değiştiremezsiniz.

Daha fazla bilgi için bkz Thread. Yönetilen ve Yönetilmeyen İş Parçacığı Oluşturma ve Gelişmiş COM Birlikte Çalışabilirliği.

Şunlara uygulanır

Ayrıca bkz.