当前位置: 首页 > article >正文

ThreadStart和ParameterizedThreadStart的区别

ThreadStart:所执行的方法不能有参数(不需要传递参数,也不需要返回参数)

启动一个线程最直观的办法是使用Thread类,具体步骤如下:

class Program
{
  static void Main(string[] args)
  {

      ThreadStart threadStart = new ThreadStart(Calculate);
      Thread thread = new Thread(threadStart);
     //以上两句可以合成一句 Thread thread = new Thread(new ThreadStart(Calculate));
     thread.Start();
     Console.ReadKey();

  public static void Calculate()
  {
    double Diameter = 0.5;
    Console.WriteLine("The Area Of Circle with a Diameter of {0} is {1}", Diameter, Diameter * Math.PI);
  }
}

运行结果:

上面我们定义了一个ThreadStart类型的委托,这个委托制定了吸纳成需要执行的方法:Calculate,在这个方法中计算一个直径为0.5的圆的周长并输出。这就构成了简单的多线程的例子。

ThreadStart

的定义:

public void Start()

也就是说,所执行的方法不能有参数,这显然是个很大的不足,为了弥补这个缺陷,.Net为了解决这个问题二设定的另一个委托就是ParameterizedThreadStart

ParameterizedThreadStart:所执行的方法可以带单个参数

ParameterizedThreadStart的定义为:

public delegate void ParameterizedThreadStart(Object obj
)

使用这个委托定义的线程的启动函数可以接受一个输入参数,具体例子如下:

class Program
{static void Main(string[] args){Console.WriteLine("****Adding with Thread objects****");Console.WriteLine("ID of thread in Main():{0}", Thread.CurrentThread.ManagedThreadId);AddParameters ap = new AddParameters(10, 10);Thread t = new Thread(new ParameterizedThreadStart(Add));t.Start(ap);Console.ReadKey();}public static void Calculate(object arg){double Diameter = (double)arg;Console.WriteLine("The Area Of Circle with a Diameter of {0} is {1}", Diameter, Diameter * Math.PI);}static void Add(object data){if(data is AddParameters){Console.WriteLine("ID of thread in Add():{0}", Thread.CurrentThread.ManagedThreadId);AddParameters ap = (AddParameters)data;Console.WriteLine("{0} + {1} is {2}", ap.a, ap.b, ap.a + ap.b);}}
}class AddParameters{public int a, b;public AddParameters(int numb1, int numb2){a = numb1;b = numb2;}}

Calculate方法有一个为object类型的参数,虽然只有一个参数,而且还是object类型的,使用的时候尚需要类型转换,但是已经可以有参数了,并且通过把多个参数组合到一个类中,然后把这个类的实例作为参数传递,就可以实现多个参数传递。

运行结果:

 

 

 

 

  

 

 

 

 

 

转载于:https://www.cnblogs.com/liucuicui/p/4478877.html

http://www.lryc.cn/news/2414046.html

相关文章:

  • Java中的堆和栈
  • 炫彩界面库v1.4.2-360安全卫士v8.5-UI设计器使用教程
  • 软件测试---软件测试开发基础
  • piwik 访客跟踪(一)
  • JS--JavaScript节点插入、删除、替换、克隆(appendChild、cloneNode、insertBefore、normalize、removeChild、replaceChild)
  • Response.Write具体介绍
  • Java后端纯小白eclipse/java安装最强最详细最完整教程
  • 如何复制加密光盘
  • 《本能》我们为什么管不住自己 - 三余书屋 3ysw.net
  • 使用 BTFS 在线观看种子视频
  • 超期服役14年,“机遇号”为何能如此长寿?
  • SDelete v2.04安全地擦除磁盘未分配部分中存在的任何文件数据(包括已经删除或加密的文件)
  • 记录一个SetupFactory使用手册
  • 11111111111111111111111111
  • activity-alias常见应用
  • caffe2 教程入门(python版)
  • 吐血分享9个软件下载网站以及那些开发者大佬的传奇人生
  • 各大日语学习网站整理
  • Android——动态设置view背景颜色setBackgroundColor
  • 爬虫案例之 xxx 视频网站
  • Google Translate API
  • 【ybt金牌导航8-5-4】【luogu P4128】有色图(dfs)(Polya定理)(分类讨论)
  • 【课程设计/毕业设计】java商城管理系统源码+开发文档(springboot + vue)
  • 特色租房管理系统/租房管理系统/房屋租赁管理系统
  • 【Vbox--ubuntu18.04,安装增强功能时没有VBoxGuestAdditions】
  • ostream头文件
  • (转)Javascript:history.go()和history.back()的用法与区别
  • Apk逆向_笔记
  • ViewFlipper的使用
  • 我的问题集