小新的技术天地

Make It Works !

博客园 首页 新随笔 联系 订阅 管理

请看代码:

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文档

注:我也是边学边写,如果有误,请大家指出,谢谢

posted on 2004-12-09 14:03  小新0574  阅读(1089)  评论(0编辑  收藏  举报