Thread.TrySetApartmentState(ApartmentState) 메서드
정의
중요
일부 정보는 릴리스되기 전에 상당 부분 수정될 수 있는 시험판 제품과 관련이 있습니다. Microsoft는 여기에 제공된 정보에 대해 어떠한 명시적이거나 묵시적인 보증도 하지 않습니다.
스레드를 시작하기 전에 스레드의 아파트 상태를 설정합니다.
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
매개 변수
- state
- ApartmentState
새 아파트 상태입니다.
반환
아파트 상태가 설정되어 있으면 true
이고, 그렇지 않으면 false
입니다.
예외
.NET Core 및 .NET 5 +만 해당: macOS 및 Linux의 모든 경우에 해당 합니다.
state
가 잘못된 아파트 상태가 아닙니다.
스레드가 시작되어 종료되었거나 스레드가 실행 중인 동안 스레드의 컨덱스트에서 호출이 수행되지 않습니다.
예제
다음 코드 예제에서는 GetApartmentState , 및 메서드를 보여 줍니다 SetApartmentState TrySetApartmentState . 코드 예제는 스레드를 만듭니다. 스레드가 시작 되기 전에는 GetApartmentState 초기 상태를 표시 하 ApartmentState.Unknown 고 SetApartmentState 상태를로 변경 ApartmentState.STA 합니다. TrySetApartmentState false
ApartmentState.MTA 아파트 상태가 이미 설정 되었기 때문에 메서드는 상태를로 변경 하려고 할 때를 반환 합니다. 로 동일한 작업을 시도한 경우 SetApartmentState 이 throw 됩니다 InvalidOperationException .
스레드가 시작 된 후에는 TrySetApartmentState 메서드가 다시 사용 됩니다. ThreadStateException스레드가 이미 시작 되었기 때문에이 시간이 throw 됩니다.
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.
설명
새 스레드는 ApartmentState.MTA 해당 아파트 상태가 시작 되기 전에 설정 되지 않은 것 처럼 초기화 됩니다. 스레드를 시작 하기 전에 아파트 상태를 설정 해야 합니다.
참고
기본 애플리케이션 스레드가 초기화가 ApartmentState.MTA 기본적으로 합니다. 주 애플리케이션 스레드의 아파트 상태를 설정 하는 유일한 방법은 ApartmentState.STA 적용 하는 것은 STAThreadAttribute 진입점 메서드 특성입니다.
메서드와 메서드와 함께 메서드는 TrySetApartmentState GetApartmentState 속성을 SetApartmentState 대체 ApartmentState 합니다.