Thread.TrySetApartmentState メソッド
アセンブリ: mscorlib (mscorlib.dll 内)

Dim instance As Thread Dim state As ApartmentState Dim returnValue As Boolean returnValue = instance.TrySetApartmentState(state)
戻り値
アパートメント状態が設定されている場合は true。それ以外の場合は false。


スレッドを開始する前にアパートメント状態が設定されていなかった場合、新しいスレッドは、ApartmentState.MTA として初期化されます。アパートメント状態は、スレッドの開始前に設定されている必要があります。
![]() |
---|
メイン アプリケーション スレッドは、既定で、ApartmentState.MTA に初期化されます。メイン アプリケーション スレッドのアパートメント状態を ApartmentState.STA に設定する唯一の方法は、STAThreadAttribute 属性をエントリ ポイントのメソッドに適用することです。 |
TrySetApartmentState メソッドを GetApartmentState メソッドおよび SetApartmentState メソッドと組み合わせて使用すると、ApartmentState プロパティが置き換えられます。
![]() |
---|
このメソッドに適用される HostProtectionAttribute 属性の Resources プロパティの値は、Synchronization または SelfAffectingThreading です。HostProtectionAttribute は、デスクトップ アプリケーション (一般的には、アイコンをダブルクリック、コマンドを入力、またはブラウザに URL を入力して起動するアプリケーション) には影響しません。詳細については、HostProtectionAttribute クラスのトピックまたは「SQL Server プログラミングとホスト保護属性」を参照してください。 |

GetApartmentState、SetApartmentState、および TrySetApartmentState の各メソッドのコード例を次に示します。このコード例ではスレッドを作成します。スレッドを開始する前に、GetApartmentState によって初期状態 ApartmentState.Unknown を表示し、SetApartmentState によって、この状態を ApartmentState.STA に変更します。TrySetApartmentState メソッドで、状態を ApartmentState.MTA に変更しようとすると、アパートメント状態が既に設定されているため、false が返されます。同じ操作を SetApartmentState を使って実行しても、InvalidOperationException がスローされます。
スレッドの開始後、TrySetApartmentState メソッドが再度実行されます。今度は、スレッドが既に開始されているため、ThreadStateException がスローされます。
Imports System 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.
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. */
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. */

Windows 98, Windows 2000 SP4, Windows Millennium Edition, Windows Server 2003, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP SP2, Windows XP Starter Edition
開発プラットフォームの中には、.NET Framework によってサポートされていないバージョンがあります。サポートされているバージョンについては、「システム要件」を参照してください。


Weblioに収録されているすべての辞書からThread.TrySetApartmentState メソッドを検索する場合は、下記のリンクをクリックしてください。

- Thread.TrySetApartmentState メソッドのページへのリンク