Thread.TrySetApartmentState(ApartmentState) Yöntem
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 iş parçacığının başlatılamadan önce küme durumunu ayarlar.
public:
bool TrySetApartmentState(System::Threading::ApartmentState state);
public bool TrySetApartmentState (System.Threading.ApartmentState state);
member this.TrySetApartmentState : System.Threading.ApartmentState -> bool
Public Function TrySetApartmentState (state As ApartmentState) As Boolean
Parametreler
- state
- ApartmentState
Yeni eyalet durumu.
Döndürülenler
true
daire durumu ayarlanmışsa; aksi takdirde, false
.
Özel durumlar
Yalnızca .NET Core ve .NET 5+ : MacOS ve Linux'ta her durumda.
state
geçerli bir ev durumu değildir.
İş parçacığı başlatıldı ve sonlandırıldı veya iş parçacığı çalışırken iş parçacığının bağlamından çağrı çalışmıyor.
Örnekler
Aşağıdaki kod örneği , GetApartmentState SetApartmentState ve yöntemlerini TrySetApartmentState gösteriyor. Kod örneği bir iş parçacığı oluşturur. İş parçacığı başlamadan önce, GetApartmentState ilk durumu görüntüler ve durumu olarak ApartmentState.Unknown SetApartmentState ApartmentState.STA değiştirir. Yöntem TrySetApartmentState daha sonra durumu olarak değiştirmeye çalışırken döndürür çünkü küme durumu zaten ayarlanmış false
ApartmentState.MTA durumdadır. ile aynı işlem SetApartmentState InvalidOperationException denenirse, atılan olurdu.
İş parçacığı başlatıldıktan sonra TrySetApartmentState yöntemi yeniden kullanılır. İş parçacığı zaten ThreadStateException başlatmış olduğundan bu kez atıyor.
using namespace System;
using namespace System::Threading;
void ThreadProc()
{
Thread::Sleep(2000);
};
void main()
{
Thread^ t = gcnew Thread(gcnew ThreadStart(ThreadProc));
Console::WriteLine("Before setting apartment state: {0}",
t->GetApartmentState());
t->SetApartmentState(ApartmentState::STA);
Console::WriteLine("After setting apartment state: {0}",
t->GetApartmentState());
bool result = t->TrySetApartmentState(ApartmentState::MTA);
Console::WriteLine("Try to change state: {0}", result);
t->Start();
Thread::Sleep(500);
try
{
t->TrySetApartmentState(ApartmentState::STA);
}
catch (ThreadStateException^)
{
Console::WriteLine("ThreadStateException occurs " +
"if apartment state is set after starting thread.");
}
t->Join();
}
/* This code example produces the following output:
Before setting apartment state: Unknown
After setting apartment state: STA
Try to change state: False
ThreadStateException occurs if apartment state is set after starting thread.
*/
using System;
using System.Threading;
class Example
{
public static void Main()
{
Thread t = new Thread(ThreadProc);
Console.WriteLine("Before setting apartment state: {0}",
t.GetApartmentState());
t.SetApartmentState(ApartmentState.STA);
Console.WriteLine("After setting apartment state: {0}",
t.GetApartmentState());
bool result = t.TrySetApartmentState(ApartmentState.MTA);
Console.WriteLine("Try to change state: {0}", result);
t.Start();
Thread.Sleep(500);
try
{
t.TrySetApartmentState(ApartmentState.STA);
}
catch (ThreadStateException)
{
Console.WriteLine("ThreadStateException occurs " +
"if apartment state is set after starting thread.");
}
t.Join();
}
public static void ThreadProc()
{
Thread.Sleep(2000);
}
}
/* This code example produces the following output:
Before setting apartment state: Unknown
After setting apartment state: STA
Try to change state: False
ThreadStateException occurs if apartment state is set after starting thread.
*/
Imports System.Threading
Module Example
Sub Main()
Dim t As New Thread(AddressOf ThreadProc)
Console.WriteLine("Before setting apartment state: {0}", _
t.GetApartmentState())
t.SetApartmentState(ApartmentState.STA)
Console.WriteLine("After setting apartment state: {0}", _
t.GetApartmentState())
Dim result As Boolean = _
t.TrySetApartmentState(ApartmentState.MTA)
Console.WriteLine("Try to change state: {0}", result)
t.Start()
Thread.Sleep(500)
Try
t.TrySetApartmentState(ApartmentState.STA)
Catch ex As ThreadStateException
Console.WriteLine("ThreadStateException occurs " & _
"if apartment state is set after starting thread.")
End Try
t.Join()
End Sub
Sub ThreadProc()
Thread.Sleep(2000)
End Sub
End Module
' This code example produces the following output:
'
'Before setting apartment state: Unknown
'After setting apartment state: STA
'Try to change state: False
'ThreadStateException occurs if apartment state is set after starting thread.
Açıklamalar
Yeni iş parçacıkları, ApartmentState.MTA başlatılmadan önce kendi evlerinin durumu ayarlanmmış gibi başlatılır. Bir iş parçacığı başlamadan önce küme durumu ayar gerekir.
Not
Ana uygulama iş parçacığı varsayılan olarak ApartmentState.MTA olarak başlatılır. Ana uygulama iş parçacığının durumunu olarak ayarlamanın tek ApartmentState.STA yolu, özniteliğini STAThreadAttribute giriş noktası yöntemine uygulamaktır.
TrySetApartmentStateyöntemi, yöntemi ve GetApartmentState SetApartmentState yöntemiyle birlikte özelliğinin yerini ApartmentState almaktadır.