不需要传递参数,也不需要返回参数

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

ThreadStart threadStart=new ThreadStart(Calculate);
Thread thread=new Thread(threadStart); 
thread.Start();

public void Calculate()


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

  上面我们用定义了一个ThreadStart类型的委托,这个委托制定了线程需要执行的方法: Calculate,在这个方法里计算了一个直径为0.5的圆的周长,并输出.这就构成了最简单的多线程的例子,在很多情况下这就够用了,然后 ThreadStart这个委托定义为void ThreadStart(),也就是说,所执行的方法不能有参数,这显然是个很大的不足,为了弥补这个缺陷,聪明的程序员想出了许多好的方法,我们将在需要传递多个参数一节中进行介绍,这里我们先介绍.Net为了解决这个问题而设定的另外一个委托:就是ParameterizedThreadStart ,我会在下面详细讲述。

  需要传递单个参数

ParameterThreadStart的定义为void ParameterizedThreadStart(object state)??使用这个这个委托定义的线程的启动函数可以接受一个输入参数,具体例子如下 
ParameterizedThreadStart threadStart=new ParameterizedThreadStart(Calculate) 
Thread thread=new Thread() ;

thread.Start(0.9);

public void Calculate(object arg)


double Diameter=double(arg); 
Console.Write("The Area Of Circle with a Diameter of {0} is {1}"Diameter,Diameter*Math.PI);
}

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

class AddParams
{
    public int a, b;

public AddParams(int numb1, int numb2)
    {
      a = numb1;
      b = numb2;
    }
}
#endregion

class Program
{
    static void Main(string[] args)
    {
      Console.WriteLine("***** Adding with Thread objects *****");
      Console.WriteLine("ID of thread in Main(): {0}",
        Thread.CurrentThread.ManagedThreadId);

AddParams ap = new AddParams(10, 10);
      Thread t = new Thread(new ParameterizedThreadStart(Add));
      t.Start(ap);
      Console.ReadLine();
    }

#region Add method
    static void Add(object data)
    {
      if (data is AddParams)
      {
        Console.WriteLine("ID of thread in Main(): {0}",
          Thread.CurrentThread.ManagedThreadId);

AddParams ap = (AddParams)data;
        Console.WriteLine("{0} + {1} is {2}",
          ap.a, ap.b, ap.a + ap.b);
      }
    }
    #endregion
}
}

转载于:https://www.cnblogs.com/goody9807/archive/2011/11/28/2266161.html

在C#中ParameterizedThreadStart和ThreadStart区别相关推荐

  1. mybatis与php,浅谈mybatis中的#和$的区别

    浅谈mybatis中的#和$的区别 发布于 2016-07-30 11:14:47 | 236 次阅读 | 评论: 0 | 来源: 网友投递 MyBatis 基于Java的持久层框架MyBatis 本 ...

  2. 关于EF中ApplyCurrentValues和ApplyOriginalValues区别

    关于EF中ApplyCurrentValues和ApplyOriginalValues区别:两者都是编辑数据时使用. //         // 摘要:         //     将 System ...

  3. java mod %区别_Java中 % 与Math.floorMod() 区别详解

    %为取余(rem),Math.floorMod()为取模(mod) 取余取模有什么区别呢? 对于整型数a,b来说,取模运算或者取余运算的方法都是: 1.求 整数商: c = a/b; 2.计算模或者余 ...

  4. JAVA 中equals()与==的区别

    原文地址:http://www.chineselinuxuniversity.net/articles/29594.shtml 值类型是存储在内存中的堆栈(以后简称栈),而引用类型的变量在栈中仅仅是存 ...

  5. python时间函数报错_python3中datetime库,time库以及pandas中的时间函数区别与详解...

    1介绍datetime库之前 我们先比较下time库和datetime库的区别 先说下time 在 Python 文档里,time是归类在Generic Operating System Servic ...

  6. java中Array和ArrayList区别 可以将 ArrayList想象成一种会自动扩增容量的Array

    java中Array和ArrayList区别 1)精辟阐述: 可以将 ArrayList想象成一种"会自动扩增容量的Array https://blog.csdn.net/ywjy10280 ...

  7. SQL点滴31—SQL语句中@@IDENTITY和@@ROWCOUNT区别

    原文:SQL点滴31-SQL语句中@@IDENTITY和@@ROWCOUNT区别 SQL语句中@@IDENTITY和@@ROWCOUNT区别 在一条 INSERT.SELECT INTO 或大容量复制 ...

  8. android r类 作用,Android 主项目和 Module 中 R 类的区别

    Android 主项目和 Module 中 R 类的区别 我们知道 Android 项目中会通过自动生成一个 R.java 类的方式来保存项目中所有资源文件的标识在主项目中生成的 R.java 中的资 ...

  9. 【mybatis】mybatis中 的# 和 $的区别

    mybatis中 的# 和 $的区别 参考地址:https://www.cnblogs.com/sxdcgaq8080/p/10869144.html 转载于:https://www.cnblogs. ...

最新文章

  1. ACMNO.10打印出所有水仙花数,所谓水仙花数是指一个三位数,其各位数字立方和等于该本身。 例如:153是一个水仙花数,因为153=1^3+5^3+3^3。 Output: 153 ???
  2. 花了一个星期,我终于把RPC框架整明白了!
  3. RSA算法原理简介,非对称加密,公开密钥算法(易懂篇)
  4. Web Service Software Factory
  5. 线程(一)__同步以及死锁
  6. 10个痛点:IT部门如何面对边缘计算
  7. iOS网络请求 get - post 区别
  8. 急聘:IDC机房建设相关职位
  9. python 游戏编程app_娱教于乐!四大游戏类编程网站,学Python再也不枯燥无味了...
  10. 什么是DTU?DTU的作用是什么?
  11. 海思芯片固件修改工具_魔百盒九联代工M301H海思Hi3798MV310芯片红外蓝牙语音遥控免拆卡刷固件及刷机教程202009版...
  12. 实时视频传输协议RTP
  13. mysql x ix_mysql – 为什么IX-lock与InnoDB中的另一个IX-lock兼容?
  14. 面试常见的功能测试考试题关于测试方法的
  15. python做相册_Python编程:制作电子相册
  16. 微软服务器管理员证书,微软认证 Azure 管理员培训
  17. 读《如何阅读一本书》有感
  18. C++读图txt文件,并将数据结构 图显示出来
  19. 关于模态窗口(showModalDialog)的专题【收藏】
  20. STM32检查不到STLink处理方法

热门文章

  1. 别人的趋势不一定是你的未来
  2. 生意场逃不开三个关键词:留存、转化、数据
  3. 今年的大环境很差,创业失败的和失去工作的特别多
  4. Golang实现Server和Client的TCP通讯
  5. 动态规划爬楼梯(为什么到i级的方法=i-1级的方法+到i-2级的方法)
  6. 队列在层次遍历中的应用
  7. sql 标量子查询_SQL Server 2017:标量子查询简化
  8. azure云数据库_在Azure Cosmos DB中使用PowerShell创建和删除数据库
  9. sql查询初学者指南_面向初学者SQL Server查询执行计划–聚集索引运算符
  10. 设置不定宽高的元素垂直水平居中