Export (0) Print
Expand All

Thread.Join Method ()

Blocks the calling thread until a thread terminates, while continuing to perform standard COM and SendMessage pumping.

Namespace: System.Threading
Assembly: mscorlib (in mscorlib.dll)

public void Join ()
public void Join ()
public function Join ()

Exception typeCondition

ThreadStateException

The caller attempted to join a thread that is in the ThreadState.Unstarted state.

ThreadInterruptedException

The thread is interrupted while waiting.

NoteNote

The HostProtectionAttribute attribute applied to this method has the following Resources property value: Synchronization | ExternalThreading. The HostProtectionAttribute does not affect desktop applications (which are typically started by double-clicking an icon, typing a command, or entering a URL in a browser). For more information, see the HostProtectionAttribute class or SQL Server Programming and Host Protection Attributes.

Use this method to ensure a thread has terminated. The caller will block indefinitely if the thread does not terminate. If the thread has already terminated when Join is called, the method returns immediately.

This method changes the state of the calling thread to include ThreadState.WaitSleepJoin. You cannot invoke Join on a thread that is in the ThreadState.Unstarted state.

The following code example shows how to use Join to wait for a thread to terminate.

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();
    }
}

import System.*;
import System.Threading.*;
import System.Threading.Thread;

class IsThreadPool
{
    public static void main(String[] args)
    {
        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();
    } //main

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

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

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

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

The .NET Framework does not support all versions of every platform. For a list of the supported versions, see System Requirements.

.NET Framework

Supported in: 2.0, 1.1, 1.0

.NET Compact Framework

Supported in: 2.0

Community Additions

ADD
Show:
© 2014 Microsoft