Esempio n. 1
0
        /// <summary>
        /// 向线程传递参数
        /// </summary>
        /// <param name="args"></param>
        static void Main(string[] args)
        {
            // 通过类的实例化传递参数
            var sample    = new ThreadSample(10);
            var threadOne = new Thread(sample.CountNumbers);

            threadOne.Name = "ThreadOne";
            threadOne.Start();
            threadOne.Join();

            Console.WriteLine("--------------------------------------");

            // 通过Start方法传参
            var threadTwo = new Thread(Count);

            threadTwo.Name = "ThreadTwo";
            threadTwo.Start(8);
            threadTwo.Join();

            Console.WriteLine("--------------------------------------");

            // 通过lambda表达式  传参
            var threadThree = new Thread(() => CountNumbers(12));

            threadThree.Start();
            threadThree.Join();

            Console.WriteLine("--------------------------------------");

            // 使用lambda表达式引用另一个C#对象的方法被称为闭包。
            // 当在lambda表达式中使用任何局部变量时,C#会生成一个类,并将该变量作为该类的一个属性。
            // 所以实际上该方法与threadOne中使用的一样,但是我们无需定义该类,C#编译器会自动帮我们实现
            // 如果在多个lambda表达式中使用相同的变量,它们会共享该变量值。
            int i          = 10;
            var threadFour = new Thread(() => PrintNumber(i));

            i = 20;
            var threadFive = new Thread(() => PrintNumber(i));

            threadFour.Start(); // print 20
            threadFive.Start(); // print 20
            // 如果在线程启动后再更改i的值,则不会影响到已经启动的线程。

            Console.ReadLine();
        }
        static void Main(string[] args)
        {
            // 类方法
            var sample    = new ThreadSample(10);
            var threadOne = new Thread(sample.CountNumbers);

            threadOne.Name = "threadOne";
            threadOne.Start();
            threadOne.Join();

            WriteLine("--------------------------------------");

            // 接收object类型参数的方法
            var threadTwo = new Thread(Count);

            threadTwo.Name = "threadTwo";
            threadTwo.Start(8);
            threadTwo.Join();

            WriteLine("--------------------------------------");

            // lambda 表达式
            var threadThree = new Thread(() => CountNumbers(12));

            threadThree.Name = "threadThree";
            threadThree.Start();
            threadThree.Join();

            WriteLine("--------------------------------------");

            // 带局部变量的lambda表达式
            int i          = 10;
            var threadFour = new Thread(() => PrintNumbers(i));

            threadFour.Name = "threadFour";
            threadFour.Start();
            i = 20;
            var threadFive = new Thread(() => PrintNumbers(i));

            threadFive.Start();
        }
Esempio n. 3
0
        static void Main(string[] args)
        {
            var sample = new ThreadSample(10);

            var threadOne = new Thread(sample.CountNumbers);

            threadOne.Name = "ThreadOne";
            threadOne.Start();
            threadOne.Join();

            Console.WriteLine("-------------------");

            var threadTwo = new Thread(Count);

            threadTwo.Name = "ThreadTwo";
            threadTwo.Start(8);
            threadTwo.Join();

            Console.WriteLine("--------------------");

            var threadThree = new Thread(() => CountNumbers(12));

            threadThree.Name = "ThreadThree";
            threadThree.Start();
            threadThree.Join();

            Console.WriteLine("---------------------");

            int i          = 10;
            var threadFour = new Thread(() => PrintNumber(i));

            i = 20;

            var threadFive = new Thread(() => PrintNumber(i));

            threadFour.Start();
            threadFive.Start();
        }