次の方法で共有


WaitCallback デリゲート

スレッド プール スレッドが実行するコールバック メソッドを表します。

<Serializable>
Public Delegate Sub WaitCallback( _   ByVal state As Object _)
[C#]
[Serializable]
public delegate void WaitCallback(   object state);
[C++]
[Serializable]
public __gc __delegate void WaitCallback(   Object* state);

[JScript] JScript では、.NET Framework のデリゲートを利用することができます。ただし、独自に定義することはできません。

パラメータ [Visual Basic, C#, C++]

コールバック メソッドの宣言のパラメータは、WaitCallback デリゲートの宣言と同じでなければなりません。

  • state
    コールバック メソッドが使用する情報を格納したオブジェクト。

解説

WaitCallback は、 ThreadPool スレッドで実行するコールバック メソッドを表します。デリゲートを作成するには、 WaitCallback コンストラクタにコールバック メソッドを渡します。メソッドには、ここに示すシグネチャを付ける必要があります。

実行するためのキューにタスクを置くには、 WaitCallback デリゲートを ThreadPool.QueueUserWorkItem に渡します。コールバック メソッドは、スレッド プール スレッドが使用可能になったときに実行されます。

[Visual Basic] メモ   Visual Basic のユーザーは WaitCallback コンストラクタを省略できます。コールバック メソッドを QueueUserWorkItem に渡すときは単純に AddressOf 演算子を使用できます。Visual Basic は正しいデリゲート コンストラクタを自動的に呼び出します。

コールバック メソッドに情報を渡す場合は、必要な情報を格納したオブジェクトを作成し、実行するためのキューにタスクを置くときにこのオブジェクトを QueueUserWorkItem に渡します。コールバック メソッドが実行されるたびに、 state パラメータはこのオブジェクトを保持します。

コールバックを使用してスレッド プール スレッドを同期する方法の詳細については、「 スレッド プーリング 」を参照してください。

使用例

 
Imports System
Imports System.Threading

Public Class Example
    Public Shared Sub Main()
        ' Queue the task.
        ThreadPool.QueueUserWorkItem( _
            New WaitCallback(AddressOf ThreadProc) _
            )
        ' Note that you do not have to create the WaitCallback delegate
        ' explicitly in Visual Basic.  The following line also queues 
        ' the task:
        'ThreadPool.QueueUserWorkItem(AddressOf ThreadProc)
        
        Console.WriteLine("Main thread does some work, then sleeps.")
        ' If you comment out the Sleep, the main thread exits before
        ' the thread pool task runs.  The thread pool uses background
        ' threads, which do not keep the application running.  (This
        ' is a simple example of a race condition.)
        Thread.Sleep(1000)

        Console.WriteLine("Main thread exits.")
    End Sub

    ' This thread procedure performs the task.
    Shared Sub ThreadProc(stateInfo As Object)
        ' No state object was passed to QueueUserWorkItem, so 
        ' stateInfo is null.
        Console.WriteLine("Hello from the thread pool.")
    End Sub
End Class

[C#] 
using System;
using System.Threading;
public class Example {
    public static void Main() {
        // Queue the task.
        ThreadPool.QueueUserWorkItem(new WaitCallback(ThreadProc));
        
        Console.WriteLine("Main thread does some work, then sleeps.");
        // If you comment out the Sleep, the main thread exits before
        // the thread pool task runs.  The thread pool uses background
        // threads, which do not keep the application running.  (This
        // is a simple example of a race condition.)
        Thread.Sleep(1000);

        Console.WriteLine("Main thread exits.");
    }

    // This thread procedure performs the task.
    static void ThreadProc(Object stateInfo) {
        // No state object was passed to QueueUserWorkItem, so 
        // stateInfo is null.
        Console.WriteLine("Hello from the thread pool.");
    }
}

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

using namespace System;
using namespace System::Threading;

__gc class Example
{
public:
// This thread procedure performs the task.
    static void ThreadProc(Object* stateInfo) 
    {
        // No state object was passed to QueueUserWorkItem, so 
        // stateInfo is 0.
        Console::WriteLine(S"Hello from the thread pool.");
    }
};

int main() 
{
    // Queue the task.
    ThreadPool::QueueUserWorkItem(new WaitCallback(0, Example::ThreadProc));

    Console::WriteLine(S"Main thread does some work, then sleeps.");
    // If you comment out the Sleep, the main thread exits before
    // the thread pool task runs.  The thread pool uses background
    // threads, which do not keep the application running.  (This
    // is a simple example of a race condition.)
    Thread::Sleep(1000);

    Console::WriteLine(S"Main thread exits.");
    return 0;
}

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

必要条件

名前空間: System.Threading

プラットフォーム: Windows 98, Windows NT 4.0, Windows Millennium Edition, Windows 2000, Windows XP Home Edition, Windows XP Professional, Windows Server 2003 ファミリ, .NET Compact Framework - Windows CE .NET

アセンブリ: Mscorlib (Mscorlib.dll 内)

参照

System.Threading 名前空間 | ThreadPool | スレッドおよびスレッド処理 | スレッド プーリング