信息
您所需的主题如下所示。但此主题未包含在此库中。

ThreadPool.QueueUserWorkItem 方法 (WaitCallback)

2013/12/13

将方法排入队列以便执行。此方法在有线程池线程变得可用时执行。

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) 重载(它接受包含所需数据的对象)。

说明注意:

当指定在对 QueueUserWorkItem 方法的调用中使用的回调方法时,Visual Basic 和 C# 用户可以省略 WaitCallback 委托构造函数。在 Visual Basic 中,使用 AddressOf 运算符。编译器将自动调用正确的委托构造函数。

下面的示例使用 QueueUserWorkItem(WaitCallback) 方法重载将任务排入队列,由 ThreadProc 方法表示,以便在线程可用时执行。此重载并不提供任何任务信息。因此,可供 ThreadProc 方法使用的信息仅限此方法所属的对象。

该示例在 UI 线程上的 TextBlock 中显示其输出。为了从回调线程访问 TextBlock,该示例使用 Dispatcher 属性来获取 TextBlockDispatcher 对象,然后使用 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

Windows Phone

显示: