/// <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(); }
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(); }