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 | スレッドおよびスレッド処理 | スレッド プーリング