次の方法で共有


Thread.ApartmentState プロパティ

定義

注意事項

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 スレッド モデルを指定できます。

適用対象

こちらもご覧ください