Thread.Join メソッド ()

スレッドが終了するまで、呼び出し元のスレッドをブロックします。

Overloads Public Sub Join()
[C#]
public void Join();
[C++]
public: void Join();
[JScript]
public function Join();

例外

例外の種類 条件
ThreadStateException 呼び出し元が、 ThreadState.Unstarted 状態のスレッドを結合しようとしました。
ThreadInterruptedException スレッドが待機中に中断されます。

解説

このメソッドを使用して、スレッドが終了したかどうかを確認します。スレッドが終了していない場合、呼び出し元は無制限にブロックされます。

このメソッドは、呼び出し元のスレッドの状態を変更して、 ThreadState.WaitSleepJoin の状態が含まれるようにします。 ThreadState.Unstarted 状態のスレッドで Join を呼び出すことはできません。

使用例

[Visual Basic, C#, C++] Join を使用してスレッドが終了するのを待機する方法の例を次に示します。

 
Option Explicit
Option Strict

Imports System
Imports System.Threading

Public Class IsThreadPool

    Shared Sub Main()
        Dim autoEvent As New AutoResetEvent(False)

        Dim regularThread As New Thread(AddressOf ThreadMethod)
        regularThread.Start()
        ThreadPool.QueueUserWorkItem(AddressOf WorkMethod, autoEvent)

        ' Wait for foreground thread to end.
        regularThread.Join()

        ' Wait for background thread to end.
        autoEvent.WaitOne()
    End Sub

    Shared Sub ThreadMethod()
        Console.WriteLine("ThreadOne, executing ThreadMethod, " & _
            "is from the thread pool? {0}", _
            Thread.CurrentThread.IsThreadPoolThread)
    End Sub

    Shared Sub WorkMethod(stateInfo As Object)
        Console.WriteLine("ThreadTwo, executing WorkMethod, " & _
            "is from the thread pool? {0}", _
            Thread.CurrentThread.IsThreadPoolThread)

        ' Signal that this thread is finished.
        DirectCast(stateInfo, AutoResetEvent).Set()
    End Sub

End Class

[C#] 
using System;
using System.Threading;

class IsThreadPool
{
    static void Main()
    {
        AutoResetEvent autoEvent = new AutoResetEvent(false);

        Thread regularThread = 
            new Thread(new ThreadStart(ThreadMethod));
        regularThread.Start();
        ThreadPool.QueueUserWorkItem(new WaitCallback(WorkMethod), 
            autoEvent);

        // Wait for foreground thread to end.
        regularThread.Join();

        // Wait for background thread to end.
        autoEvent.WaitOne();
    }

    static void ThreadMethod()
    {
        Console.WriteLine("ThreadOne, executing ThreadMethod, " +
            "is {0}from the thread pool.", 
            Thread.CurrentThread.IsThreadPoolThread ? "" : "not ");
    }

    static void WorkMethod(object stateInfo)
    {
        Console.WriteLine("ThreadTwo, executing WorkMethod, " +
            "is {0}from the thread pool.", 
            Thread.CurrentThread.IsThreadPoolThread ? "" : "not ");

        // Signal that this thread is finished.
        ((AutoResetEvent)stateInfo).Set();
    }
}

[C++] 
#using <mscorlib.dll>

using namespace System;
using namespace System::Threading;

__gc class IsThreadPool
{
public:
    static void ThreadMethod()
    {
        Console::WriteLine(S"ThreadOne, executing ThreadMethod, "
            S"is {0}from the thread pool.", 
            Thread::CurrentThread->IsThreadPoolThread ? S"" : S"not ");
    }

    static void WorkMethod(Object* stateInfo)
    {
        Console::WriteLine(S"ThreadTwo, executing WorkMethod, "
            S"is {0}from the thread pool.", 
            Thread::CurrentThread->IsThreadPoolThread ? S"" : S"not ");

        // Signal that this thread is finished.
        dynamic_cast<AutoResetEvent*>(stateInfo)->Set();
    }
};

void main()
{
    AutoResetEvent* autoEvent = new AutoResetEvent(false);

    Thread* regularThread = 
        new Thread(new ThreadStart(0, &IsThreadPool::ThreadMethod));
    regularThread->Start();
    ThreadPool::QueueUserWorkItem(new WaitCallback(0, 
        &IsThreadPool::WorkMethod), autoEvent);

    // Wait for foreground thread to end.
    regularThread->Join();

    // Wait for background thread to end.
    autoEvent->WaitOne();
}

[JScript] JScript のサンプルはありません。Visual Basic、C#、および C++ のサンプルを表示するには、このページの左上隅にある言語のフィルタ ボタン 言語のフィルタ をクリックします。

必要条件

プラットフォーム: Windows 98, Windows NT 4.0, Windows Millennium Edition, Windows 2000, Windows XP Home Edition, Windows XP Professional, Windows Server 2003 ファミリ, Common Language Infrastructure (CLI) Standard

参照

Thread クラス | Thread メンバ | System.Threading 名前空間 | Thread.Join オーバーロードの一覧 | スレッド状態