ApartmentState Sabit listesi
Tanım
Önemli
Bazı bilgiler ürünün ön sürümüyle ilgilidir ve sürüm öncesinde önemli değişiklikler yapılmış olabilir. Burada verilen bilgilerle ilgili olarak Microsoft açık veya zımni hiçbir garanti vermez.
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
- Ö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.