一 概述
- 在C#语言中使用线程时首先要创建线程,在使用Thread类的构造方法创建其实例时,需要用到ThreadStart委托或者ParameterizedThreadStart委托创建Thread类的实例
- ThreadStart委托只能用于无返回值、无参数的方法,ParameterizedThreadStart委托则可以用于带参数的方法
二 创建过程
使用ThreadStart创建线程首先需要创建ThreadStart委托的实例,然后再创建Thread类的实例。具体代码如下:
1 2
| ThreadStart ts = new ThreadStart( 方法名 ); Thread t = new Thread(ts);
|
三 实例
3.1 实例一 使用 ThreadStart 委托创建线程,并定义一个方法输出 0〜10 中所有的偶数
3.1.1 代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| class Program { static void Main(string[] args) { ThreadStart ts = new ThreadStart(PrintEven); Thread t = new Thread(ts); t.Start(); } //定义打印0~10中的偶数的方法 private static void PrintEven() { for(int i = 0; i <= 10; i=i+2) { Console.WriteLine(i); } } }
|
3.1.2 效果
3.1.3 说明
从上面的运行效果可以看出,使用ThreadStart委托为PrintEvent方法创建了线程,通过线程的Start方法启动线程并调用了PrintEvent方法
3.2 实例二 在上一实例的基础上添加一个打印 1〜10 中的奇数的方法,再分别使用两个 Thread 类的实例启动打印奇数和偶数的方法
3.2.1 代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
| class Program { static void Main(string[] args) { ThreadStart ts1 = new ThreadStart(PrintEven); Thread t1 = new Thread(ts1); ThreadStart ts2 = new ThreadStart(PrintOdd); Thread t2 = new Thread(ts2); t1.Start(); t2.Start(); } //定义打印0~10中的偶数的方法 private static void PrintEven() { for(int i = 0; i <= 10; i=i+2) { Console.Write(i+" "); } } //定义打印1~10 中的奇数的方法 public static void PrintOdd() { for(int i = 1; i <= 10; i = i + 2) { Console.Write(i+" "); } } }
|
3.2.2 效果
3.2.3 说明
- 从上面的运行效果可以看出,两个线程分别打印了 1〜10 中的奇数和 0〜10 中的偶数,但并不是按照线程的调用顺序先打印出所有的偶数再打印奇数
- 需要注意的是,由于没有对线程的执行顺序和操作做控制,所以运行该程序每次打印的值的顺序是不一样的