请看代码:
using System;
using System.Threading;
class ThreadTest
{
//工作线程的方法
public static void WorkerThreadMethod()
{
//获得当前正在执行的线程对象
Thread w1 = Thread.CurrentThread;
w1.Name = "工作中
";
for(int i=1; i<10 ;i++)
{
//每次循环暂停线程0.4秒
Thread.Sleep(400);
Console.WriteLine(w1.Name);
}
}
public static void Main()
{
//用于封装工作线程的委托
ThreadStart worker1 = new ThreadStart(WorkerThreadMethod);
Console.WriteLine("[主函数]开始创建工作线程");
//新建一个线程实例,使用worker1委托作为参数,说明这个线程执行的是委托worker1封装的方法
Thread t1 = new Thread(worker1);
//启动线程
t1.Start();
//阻塞当前的主线程,直到t1线程终止
t1.Join();
Console.WriteLine("[主函数]工作线程结束");
Console.ReadLine();
}
}大部分语句都已经给出注释,比较好理解。
输出结果是:
[主函数]开始创建工作线程
工作中...
工作中...
工作中...
工作中...
工作中...
工作中...
工作中...
工作中...
工作中...
[主函数]工作线程结束
在说明几点注意的地方:
Thread.Current 方法跟Thread.Sleep方法都是静态方法,不要用线程的实例去调用。
一个线程实例的构造函数需要一个ThreadStart委托作为参数,这个委托封装的是这个线程上进行的操作函数。
由于t1线程是相对于主线程是异步的,如果我们去掉t1.Join()语句,那么结果将是
[主函数]开始创建工作线程
[主函数]工作线程结束
工作中...
工作中...
工作中...
工作中...
工作中...
工作中...
工作中...
工作中...
工作中...
也就是说主线程并没有等待t1线程执行完毕再执行接下来的语句。如果要让主线程停下来等待,就加上t1.Join()语句,Join方法就可以阻塞当前正在进行的线程,直到调用它的线程t1完成。
此文参考:<<C#技术解密>>
微软MSDN文档
注:我也是边学边写,如果有误,请大家指出,谢谢

浙公网安备 33010602011771号