C#多线程技术(一)

公司项目有可能采用C#编写,如果用到,必然会涉及到多线程技术,基本的概念都是相同的,差别是具体的代码。

 

在C#中,线程函数执行被封装在类中,通过类对象的Start函数启动线程执行函数。线程类Thread接受的是一个ThreadStart的delegate类型对象,具体代码应该如下:

 

 1  using  System;
 2  using  System.Collections.Generic;
 3  using  System.Linq;
 4  using  System.Text;
 5  using  System.Threading;
 6 
 7  namespace  MultiThreadTest
 8  {
 9       class  Program
10      {
11           static   void  Main( string [] args)
12          {
13              Thread thread1  =   new  Thread(
14                           delegate ()
15                          {
16                              Console.WriteLine( " Hello Here! " );
17                          }
18                      );
19              Thread thread2  =   new  Thread(
20                      ()  =>              //  lambda 表达式
21                      {
22                          Console.WriteLine( " Well then goodbye!\n " );
23                      }
24                  );
25 
26              thread1.Start();
27              thread2.Start();
28          }
29      }
30  }
31 

 

 通常在多线程中,我们需要等待所有的线程都结束,系统才会等待运行退出。这个时候,可以调用线程对象的Join函数,该函数在线程达到尾部结束的时候,会进行线程返回。

 

当线程个数很多的时候,不带参数的Join函数需要多次调用,非常费时费劲,这个时候,可以调用带时间参数的Join函数,当超过时间后,系统强制结束线程运行,如下面的代码:

 

1               if  (  ! thread.Join( 30000 ))
2              {
3                  thread.Abort();
4              }

 

 

 之前处理的线程函数,都无法对数据状态进行保存处理,这样,对于复杂应用显然不是特别适合,C#的Thread采用ThreadStart委托方式,可以很好的解决这个问题:

 

ExpandedBlockStart.gif 代码
 1       class  ThreadedTask{
 2           string  _whatToSay;
 3           public  ThreadedTask( string  whatToSay){
 4              _whatToSay  =  whatToSay;
 5          }
 6 
 7           public   void  MethodToRun(){
 8              Console.WriteLine( " I am babbling (  "   +  _whatToSay  +   "  ) " );
 9          }
10      }
11 
12 
13          ThreadedTask task  =   new  ThreadedTask( " hello " );
14 
15          Thread thread  =   new  Thread(
16                               new  ThreadStart(task.MethodToRun)
17                          );
18          thread.Start();

 

 字符串hello被存在类中,通过委托的方式将MethodToRun方法委托到线程内部,然后调用Start函数,这个时候,保存到类中的数据也可以被准确获取出来。

 

 

 


 

 

 

 

 

转载于:https://www.cnblogs.com/ubunoon/archive/2010/02/21/1670789.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值