首页 > C#教程 > C#进程与线程 阅读:2,272

C# ThreadStart:创建线程

< 上一页C# Thread C# ParameterizedThreadStart下一页 >

C# 语言中使用线程时首先需要创建线程,在使用 Thread 类的构造方法创建其实例时,需要用到 ThreadStart 委托或者 ParameterizedThreadStart 委托创建 Thread 类的实例。

ThreadStart 委托只能用于无返回值、无参数的方法,ParameterizedThreadStart 委托则可以用于带参数的方法。

本节主要介绍使用 ThreadStart 委托创建 Thread 类的实例,关于 ParameterizedThreadStart 委托我们将在下一节《C# ParameterizedThreadStart》中为大家讲解。

使用 ThreadStart 创建线程首先需要创建 ThreadStart 委托的实例,然后再创建 Thread 类的实例。

具体的代码如下。

ThreadStart ts = new ThreadStart( 方法名 );
Thread t = new Thread(ts);

【实例 1】使用 ThreadStart 委托创建线程,并定义一个方法输出 0〜10 中所有的偶数。

根据题目要求,创建控制台应用程序,实现该程序的代码如下。
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);
        }
    }
}
运行该程序,效果如下图所示。

使用线程打印0~10 之间的偶数

从上面的运行效果可以看出,使用 Threadstart 委托为 PrintEven 方法创建了线程,通过线程的 Start 方法启动线程并调用了 PrintEven 方法。

在一个应用程序中能同时启动多个线程,下面通过实例演示启动多个线程的效果。

【实例 2】在上一实例的基础上添加一个打印 1〜10 中的奇数的方法,再分别使用两个 Thread 类的实例启动打印奇数和偶数的方法。

根据题目要求,实现的代码如下。
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.WriteLine(i);
        }
    }
    //定义打印1~10 中的奇数的方法
    public static void PrintOdd()
    {
        for(int i = 1; i <= 10; i = i + 2)
        {
            Console.WriteLine(i);
        }
    }
}
运行该程序,效果如下图所示。

使用两个线程分别打印0~10之间的奇数和偶数

从上面的运行效果可以看出,两个线程分别打印了 1〜10 中的奇数和 0〜10 中的偶数,但并不是按照线程的调用顺序先打印出所有的偶数再打印奇数。

需要注意的是,由于没有对线程的执行顺序和操作做控制,所以运行该程序每次打印的值的顺序是不一样的。
< 上一页C# Thread C# ParameterizedThreadStart下一页 >