• 启动时创建线程并传递数据


    原文地址:https://msdn.microsoft.com/zh-cn/library/ts553s52(v=vs.110).aspx

    在 .NET Framework 2.0 版中,ParameterizedThreadStart 委托提供了一种简便方法,可以在调用 Thread.Start 方法重载时将包含数据的对象传递给线程。 有关代码示例,请参见 ParameterizedThreadStart

    使用 ParameterizedThreadStart 委托不是传递数据的类型安全的方法,因为 Thread.Start 方法重载接受任何对象。 一种替代方法是将线程过程和数据封装在帮助器类中,并使用 ThreadStart 委托执行线程过程。 该技术在下面的两个代码示例中演示。

    这两个委托都没有返回值,因为没有地方用于从异步调用中返回数据。 为检索线程方法的结果,您可以使用回调方法,如第二个代码示例中所示。

    using System;
    using System.Threading;
    
    // The ThreadWithState class contains the information needed for
    // a task, and the method that executes the task.
    //帮助器类
    public class ThreadWithState
    {
        // State information used in the task.
        private string boilerplate;
        private int value;
    
        // The constructor obtains the state information.
        public ThreadWithState(string text, int number)
        {
            boilerplate = text;
            value = number;
        }
    
        // The thread procedure performs the task, such as formatting
        // and printing a document.
        public void ThreadProc()
        {
            Console.WriteLine(boilerplate, value);
        }
    }
    
    // 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);
    
            // Create a thread to execute the task, and then
            // start the thread.
            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 example displays the following output:
    //       Main thread does some work, then waits.
    //       This report displays the number 42.
    //       Independent task has completed; main thread ends.

    ts553s52.collapse_all(zh-cn,VS.110).gif使用回调方法检索数据

    下面的示例演示了一个从线程中检索数据的回调方法。 包含数据和线程方法的类的构造函数也接受代表回调方法的委托;在线程方法结束前,它调用该回调委托。

    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);
        }
    }
    // The example displays the following output:
    //       Main thread does some work, then waits.
    //       This report displays the number 42.
    //       Independent task printed 1 lines.
    //       Independent task has completed; main thread ends.
  • 相关阅读:
    团队总结-文艺复兴
    文艺复兴-冲刺总结
    文艺复习-测试博客
    文艺复习-冲刺集合
    冲刺第一天
    凡事预则立
    2020软件工程作业05
    2020软件工程作业04
    前端怎么去学
    十、Kernel_3.0.35版本和Kernel_4.1.15版本在SPI驱动实现机制的差异
  • 原文地址:https://www.cnblogs.com/niaowo/p/4722086.html
Copyright © 2020-2023  润新知