카테고리 없음

.NET MVC] 쓰레드 콜백

James Wetzel 2015. 4. 20. 10:45

using System;

using System.Threading;


// The ThreadWithState class contains the information needed for

// a task, the method that executes the task, and a delegate

// to call when the task is complete.

//

public class ThreadWithState

{

    // State information used in the task.

    private string boilerplate;

    private int value;


    // Delegate used to execute the callback method when the

    // task is complete.

    private ExampleCallback callback;


    // The constructor obtains the state information and the

    // callback delegate.

    public ThreadWithState(string text, int number, 

        ExampleCallback callbackDelegate

    {

        boilerplate = text;

        value = number;

        callback = callbackDelegate;

    }


    // The thread procedure performs the task, such as

    // formatting and printing a document, and then invokes

    // the callback delegate with the number of lines printed.

    public void ThreadProc() 

    {

        Console.WriteLine(boilerplate, value);

        if (callback != null) { callback(1); }

    }

}


// Delegate that defines the signature for the callback method.

//

public delegate void ExampleCallback(int lineCount);


// Entry point for the example.

//

public class Example 

{

    public static void Main() 

    {

        // Supply the state information required by the task.

        ThreadWithState tws = new ThreadWithState(

            "This report displays the number {0}.",

            42,

            new ExampleCallback(ResultCallback)

        );


        Thread t = new Thread(new ThreadStart(tws.ThreadProc));

        t.Start();

        Console.WriteLine("Main thread does some work, then waits.");

        t.Join();

        Console.WriteLine(

            "Independent task has completed; main thread ends."); 

    }


    // The callback method must match the signature of the

    // callback delegate.

    //

    public static void ResultCallback(int lineCount) 

    {

        Console.WriteLine(

            "Independent task printed {0} lines.", lineCount);

    }

}



728x90
반응형