在程序头部,我们引用如下命名空间:
示例如下:
using System;
using System.Threading;
在.net framework 类库中,所有与多线程机制相关的类都在System.Threading命名空间中的。
因此使用多线程,就必须包含这个类。
static void Main(string[] args)
{
Thread t = new Thread(PrintNumbers);
t.Start();
PrintNumbers();
}
static void PrintNumbers()
{
Console.WriteLine("Starting...");
for (int i = 1; i < 10; i++)
{
Console.WriteLine(i);
}
}
从上面的示例中可以看出,Thread这个构造函数把PrintNumbers方法作为它的参数,这是为什么呢?
我们来看一下微软对Thread的定义:
Thread类的构造函数有三个重载,
1. Thread(ThreadStart start)
2. Thread(ThreadStart start, int maxStackSize)
3. Thread(ParameterizedThreadStart start)
第一个构造函数有一个ThreadStart类型的参数,事实上,它是一个委托:
public delegate void ThreadStart();
因此这个参数表示此线程开始执行时要调用的方法,并且这是一个没有参数的委托类型,不支持向调用的方法传递一个参数。
第二个构造函数的第二个参数maxStackSize是int型的,表示线程要使用的最大堆栈大小,如果为0则使用可执行文件的文件头中指定的默认最大堆栈大小。
第三个构造函数是ParameterizedThreadStart也是一个委托类型,表示此线程开始执行时要调用的方法,支持向调用的方法传递一个参数。他的定义如下:
public delegate void ParameterizedThreadStart(object obj);
示例如下:
static void Main(string[] args)
{
Thread t = new Thread(PrintHello);
<pre name="code" class="csharp"> t.Start("Jobs");
}
static void PrintHello(object o)
{
Console.WriteLine("Starting...");
Console.WriteLine("hello,{0}", o);
}
OK,本篇到此结束,进阶请看下篇!