情報
要求されたトピックは次のとおりです。しかし、このトピックはこのライブラリには含まれていません。

ThreadPool.QueueUserWorkItem メソッド (WaitCallback)

2013/12/12

メソッドを実行するためのキューに置きます。メソッドは、スレッド プールのスレッドが使用可能になったときに実行されます。

Namespace:  System.Threading
アセンブリ:  mscorlib (mscorlib.dll 内)

public static bool QueueUserWorkItem(
	WaitCallback callBack
)

パラメーター

callBack
型: System.Threading.WaitCallback
実行するメソッド。

戻り値

型: System.Boolean
メソッドが正常にキューに配置された場合は true。作業項目をキューに配置できなかった場合は NotSupportedException がスローされます。

例外条件
NotSupportedException

共通言語ランタイム (CLR) がホストされており、ホストはこの操作をサポートしていません。

ArgumentNullException

callBacknull です。

キューに置かれたメソッドで必要となるデータは、メソッドを定義しているクラスのインスタンス フィールドに格納することも、必要なデータを格納したオブジェクトを受け取る QueueUserWorkItem(WaitCallback, Object) オーバーロードを使用することもできます。

メモメモ:

Visual Basic および C# のユーザーは、QueueUserWorkItem メソッドの呼び出しにコールバック メソッドを指定するときは、WaitCallback デリゲート コンストラクターを省略できます。Visual Basic では、AddressOf 演算子を使用します。コンパイラによって、適切なデリゲート コンストラクターが自動的に呼び出されます。

次のコード例では、QueueUserWorkItem(WaitCallback) メソッドのオーバーロードを使用して、タスクをキューに配置します。これは、ThreadProc メソッドで表され、スレッドが使用可能になったときに実行されます。このオーバーロードには、タスク情報は指定していません。したがって、ThreadProc メソッドが使用できる情報は、このメソッドが属するオブジェクトに限定されます。

出力は、UI スレッドの TextBlock に表示されます。コールバック スレッドから TextBlock にアクセスするために、Dispatcher プロパティを使用して TextBlock 用の Dispatcher オブジェクトを取得した後、Dispatcher.BeginInvoke メソッドを使用してスレッド間呼び出しを実行しています。

メモメモ:

この例を実行するには、「Windows Phone での静的 TextBlock コントロールのあるコード例のビルド」を参照してください。


using System;
using System.Threading;

class Example
{
    // This is the UI element that receives the output from the example.
    private static System.Windows.Controls.TextBlock outputBlock;

    // The Demo method runs the example. It saves the TextBlock that is 
    // used for output, and sets up an event handler to start tasks.
    public static void Demo(System.Windows.Controls.TextBlock outputBlock)
    {
        Example.outputBlock = outputBlock;
        outputBlock.Text = "Click here to start a background task.\r\n";

        // Set up an event handler to start a task when the TextBlock 
        // is clicked.
        outputBlock.MouseLeftButtonUp += HandleMouseUp;
    }

    // Clicking the TextBlock queues a delegate to perform a task on a 
    // thread pool thread.
    private static void HandleMouseUp(object sender, 
                                      System.Windows.Input.MouseButtonEventArgs e)
    {
        ThreadPool.QueueUserWorkItem(AppendTextTask);

        // Note: The stateInfo object for the task in this example is
        // Nothing, because this overload of QueueUserWorkItem does not
        // take a stateInfo parameter. 
    }

    // This method performs the task, which is to append text to the
    // TextBlock. To communicate with objects on the UI thread, get the 
    // Dispatcher for one of the UI objects. Use the Dispatcher object's 
    // BeginInvoke method to queue a delegate that will run on the UI thread,
    // and therefore can safely access UI elements like the TextBlock.
    private static void AppendTextTask(object stateInfo)
    {
        outputBlock.Dispatcher.BeginInvoke(delegate () {
            outputBlock.Text += "Hello from the thread pool.\r\n";
        });
    }
}

/* This code produces output similar to the following:

Click here to start a background task.
Hello from the thread pool.
Hello from the thread pool.
Hello from the thread pool.
 */


Windows Phone OS

サポート: 8.0, 7.1, 7.0

表示: