Thread.ApartmentState プロパティ
定義
重要
一部の情報は、リリース前に大きく変更される可能性があるプレリリースされた製品に関するものです。 Microsoft は、ここに記載されている情報について、明示または黙示を問わず、一切保証しません。
注意事項
The ApartmentState property has been deprecated. Use GetApartmentState, SetApartmentState or TrySetApartmentState instead.
注意事項
The ApartmentState property has been deprecated. Use GetApartmentState, SetApartmentState or TrySetApartmentState instead.
このスレッドのアパートメント状態を取得または設定します。
public:
property System::Threading::ApartmentState ApartmentState { System::Threading::ApartmentState get(); void set(System::Threading::ApartmentState value); };
[System.Obsolete("The ApartmentState property has been deprecated. Use GetApartmentState, SetApartmentState or TrySetApartmentState instead.", false)]
public System.Threading.ApartmentState ApartmentState { get; set; }
[System.Obsolete("The ApartmentState property has been deprecated. Use GetApartmentState, SetApartmentState or TrySetApartmentState instead.")]
public System.Threading.ApartmentState ApartmentState { get; set; }
public System.Threading.ApartmentState ApartmentState { get; set; }
[<System.Obsolete("The ApartmentState property has been deprecated. Use GetApartmentState, SetApartmentState or TrySetApartmentState instead.", false)>]
member this.ApartmentState : System.Threading.ApartmentState with get, set
[<System.Obsolete("The ApartmentState property has been deprecated. Use GetApartmentState, SetApartmentState or TrySetApartmentState instead.")>]
member this.ApartmentState : System.Threading.ApartmentState with get, set
member this.ApartmentState : System.Threading.ApartmentState with get, set
Public Property ApartmentState As ApartmentState
プロパティ値
ApartmentState 値のいずれか 1 つ。 初期値は Unknown
です。
- 属性
例外
このプロパティを、有効ではないアパートメント状態に設定しようとしました (シングル スレッド アパートメント (STA
) またはマルチ スレッド アパートメント (MTA
) 以外の状態)。
例
次のコード例では、スレッドのアパートメント状態を設定する方法を示します。
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);
}
}
open System.Threading
let threadMethod () = Thread.Sleep 1000
let newThread = Thread threadMethod
newThread.SetApartmentState ApartmentState.MTA
printfn $"ThreadState: {newThread.ThreadState}, ApartmentState: {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
with :? ThreadStateException as stateException ->
printfn $"\n{stateException.GetType().Name} caught:\nThread is not in the Unstarted or Running state."
printfn $"ThreadState: {newThread.ThreadState}, ApartmentState: {newThread.GetApartmentState()}"
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
注釈
ApartmentState は互換性のために残されています。 廃止されていない代替手段は、 GetApartmentState アパートメント状態を取得するメソッドと、アパートメント状態を SetApartmentState 設定するメソッドです。
.NET Framework バージョン 1.0 および 1.1 では、 ApartmentState
プロパティはスレッドをマークして、シングル スレッドまたはマルチスレッド アパートメントで実行されることを示します。 このプロパティは、スレッドが または Running
スレッド状態の場合にUnstarted
設定できますが、スレッドに対して 1 回だけ設定できます。 プロパティが設定されていない場合は、 を返します Unknown
。
プロパティを ApartmentState 使用して、既にアパートメント状態が設定されているスレッドのアパートメント状態を設定しようとすると、無視されます。 ただし、この場合、 SetApartmentState メソッドは を InvalidOperationException スローします。
重要
.NET Framework バージョン 2.0 では、新しいスレッドは、アパートメント状態が開始される前に設定されていないかのようにApartmentState.MTA初期化されます。 メイン アプリケーション スレッドは、既定で に ApartmentState.MTA 初期化されます。 コードの最初の行で プロパティを ApartmentState.STA 設定することで、 System.Threading.ApartmentState メイン アプリケーション スレッドを に設定できなくなりました。 代わりに STAThreadAttribute を使用してください。
バージョン 2.0 .NET Frameworkでは、/CLRTHREADATTRIBUTE (CLR スレッド属性の設定) リンカー オプションを使用して、C++ アプリケーションの COM スレッド モデルを指定できます。
適用対象
こちらもご覧ください
.NET