Thread.GetApartmentState メソッド

定義

アパートメント状態を示す ApartmentState 値を返します。Returns an ApartmentState value indicating the apartment state.

public:
 System::Threading::ApartmentState GetApartmentState();
public System.Threading.ApartmentState GetApartmentState ();
member this.GetApartmentState : unit -> System.Threading.ApartmentState
Public Function GetApartmentState () As ApartmentState

戻り値

マネージド スレッドのアパートメント状態を示す ApartmentState 値の 1 つ。One of the ApartmentState values indicating the apartment state of the managed thread. 既定値は、Unknown です。The default is Unknown.

次のコード例は、GetApartmentStateSetApartmentState、および TrySetApartmentState メソッドを示しています。The following code example demonstrates the GetApartmentState, SetApartmentState, and TrySetApartmentState methods. このコード例では、スレッドを作成します。The code example creates a thread. スレッドが開始される前に、GetApartmentState は初期の ApartmentState.Unknown の状態を表示し、SetApartmentState 状態を ApartmentState.STAに変更します。Before the thread is started, GetApartmentState displays the initial ApartmentState.Unknown state and SetApartmentState changes the state to ApartmentState.STA. TrySetApartmentState メソッドは、アパートメント状態が既に設定されているために状態を ApartmentState.MTA に変更しようとしたときに false を返します。The TrySetApartmentState method then returns false when attempting to change the state to ApartmentState.MTA because the apartment state is already set. SetApartmentStateで同じ操作が試行された場合、InvalidOperationException がスローされます。If the same operation had been attempted with SetApartmentState, InvalidOperationException would have been thrown.

スレッドが開始されると、TrySetApartmentState メソッドが再び使用されます。After the thread is started, the TrySetApartmentState method is used again. 今回は、スレッドが既に開始されているため ThreadStateException をスローします。This time it throws ThreadStateException because the thread has already been started.

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.

注釈

このメソッドと共に、SetApartmentState メソッドと TrySetApartmentState メソッドを使用して、ApartmentState プロパティを置き換えます。This method, along with the SetApartmentState method and the TrySetApartmentState method, replaces the ApartmentState property.

適用対象