정보
요청한 주제가 아래에 표시됩니다. 그러나 이 주제는 이 라이브러리에 포함되지 않습니다.

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) 오버로드를 사용할 수 있습니다.

참고참고:

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

Windows Phone

표시: