Thread.IsThreadPoolThread Property

Definition

Gets a value indicating whether or not a thread belongs to the managed thread pool.

public:
 property bool IsThreadPoolThread { bool get(); };
public bool IsThreadPoolThread { get; }
member this.IsThreadPoolThread : bool
Public ReadOnly Property IsThreadPoolThread As Boolean

Property Value

true if this thread belongs to the managed thread pool; otherwise, false.

Examples

The following code example shows how to determine whether a thread is from the thread pool.

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();
    }
}
open System.Threading

let threadMethod () =
    printfn
        $"""ThreadOne, executing ThreadMethod, is {if Thread.CurrentThread.IsThreadPoolThread then
                                                       ""
                                                   else
                                                       "not "}from the thread pool."""

let workMethod stateInfo =
    printfn
        $"""ThreadTwo, executing WorkMethod, is {if Thread.CurrentThread.IsThreadPoolThread then
                                                     ""
                                                 else
                                                     "not "}from the thread pool."""

    // Signal that this thread is finished.
    (unbox<AutoResetEvent> stateInfo).Set() |> ignore

let autoEvent = new AutoResetEvent false

let regularThread = Thread threadMethod
regularThread.Start()
ThreadPool.QueueUserWorkItem(workMethod, autoEvent) |> ignore

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

// Wait for background thread to end.
autoEvent.WaitOne() |> ignore
Option Explicit
Option Strict

Imports System.Threading

Public Class IsThreadPool

    <MTAThread> _
    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

Remarks

For more information see The managed thread pool.

Applies to

See also