线程操作主要用到Thread类,他是定义在System.Threading.dll下。使用时需要添加这一个引用。该类提供给我们四个重载的构造函数(以下引自msdn)。 

       Thread (ParameterizedThreadStart)  初始化 Thread 类的新实例,指定允许对象在线程启动时传递给线程的委托。  
       Thread (ThreadStart)  初始化 Thread 类的新实例。  

       Thread (ParameterizedThreadStart, Int32)  初始化 Thread 类的新实例,指定允许对象在线程启动时传递给线程的委托,并指定线程的最大堆栈大小。  

        Thread (ThreadStart, Int32)  初始化 Thread 类的新实例,指定线程的最大堆栈大小。

我们如果定义不带参数的线程,可以用ThreadStart带一个参数的用ParameterizedThreadStart。带多个参数的用另外的方法,下面逐一讲述。

一、不带参数的 

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Text;
  4. using System.Threading;
  5. namespace AAAAAA
  6. {
  7. class AAA
  8. {
  9. public static void Main()
  10. {
  11. Thread t = new Thread(new ThreadStart(A));
  12. t.Start();
  13. Console.Read();
  14. }
  15. private static void A()
  16. {
  17. Console.WriteLine("Method A!");
  18. }
  19. }
  20. }

结果显示Method A!

 二、带一个参数的 
        由于ParameterizedThreadStart要求参数类型必须为object,所以定义的方法B形参类型必须为object。

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Text;
  4. using System.Threading;
  5. namespace AAAAAA
  6. {
  7. class AAA
  8. {
  9. public static void Main()
  10. {
  11. Thread t = new Thread(new ParameterizedThreadStart(B));
  12. t.Start("B");
  13. Console.Read();
  14. }
  15. private static void B(object obj)
  16. {
  17. Console.WriteLine("Method {0}!",obj.ToString ());
  18. }
  19. }
  20. }

结果显示Method B!

三、带多个参数的 
          由于Thread默认只提供了这两种构造函数,如果需要传递多个参数,我们可以自己将参数作为类的属性。定义类的对象时候实例化这个属性,然后进行操作。

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Text;
  4. using System.Threading;
  5. namespace AAAAAA
  6. {
  7. class AAA
  8. {
  9. public static void Main()
  10. {
  11. My m = new My();
  12. m.x = 2;
  13. m.y = 3;
  14. Thread t = new Thread(new ThreadStart(m.C));
  15. t.Start();
  16. Console.Read();
  17. }
  18. }
  19. class My
  20. {
  21. public int x, y;
  22. public void C()
  23. {
  24. Console.WriteLine("x={0},y={1}", this.x, this.y);
  25. }
  26. }
  27. }

结果显示x 

         四、利用结构体给参数传值。 

         定义公用的public struct结构体,里面可以定义自己需要的参数,然后在需要添加线程的时候,可以定义结构体的实例。

  1. //结构体
  2. struct RowCol
  3. {
  4. public int row;
  5. public int col;
  6. };
  7. //定义方法
  8. public void Output(Object rc)
  9. {
  10. RowCol rowCol = (RowCol)rc;
  11. for (int i = 0; i < rowCol.row; i++)
  12. {
  13. for (int j = 0; j < rowCol.col; j++)
  14. Console.Write("{0} ", _char);
  15. Console.Write("/n");
  16. }
  17. }

c#线程间传递参数的更多相关文章

  1. Jmeter(五十二) - 从入门到精通高级篇 - jmeter之跨线程组传递参数(详解教程)

    1.简介 之前分享的所有文章都是只有一个线程组,而且参数的传递也只在一个线程组中,那么如果需要在两个线程组中传递参数,我们怎么做呢?宏哥今天就给小伙伴或者童鞋们讲解一下,如何实现在线程组之间传递参数. ...

  2. jsp页面间传递参数 中文乱码问题(zz)

      jsp页面间传递参数 中文乱码问题 1.传递参数 var url = "*****Test.jsp?param1="+encodeURI(encodeURI(str));//对 ...

  3. ios页面间传递参数四种方式

    ios页面间传递参数四种方式 1.使用SharedApplication,定义一个变量来传递. 2.使用文件,或者NSUserdefault来传递 3.通过一个单例的class来传递 4.通过Dele ...

  4. jmeter中线程之间传递参数

    JMeter 变量作用域局限于所属线程.这样设计是经过深思熟虑的,目的是让测试线程能够独立运转.有时候用户可能需要在不同线程间(可能属于同一个线程组,也可能不属于同一个线程组)传递变量. 其中一种方法 ...

  5. JSP页面间传递参数的5种方法

    JSP页面间传递参数是经常需要使用到的功能,有时还需要多个JSP页面间传递参数.下面介绍一下实现的方法. (1)直接在URL请求后添加 如:< a href="thexuan.jsp? ...

  6. JavaScript学习总结(三、函数声明和表达式、this、闭包和引用、arguments对象、函数间传递参数)

    一.函数声明和表达式 函数声明: function test() {}; test();    //运行正常 function test() {}; 函数表达式: var test = functio ...

  7. WPF 进程间传递参数

    WPF 进程间传递参数          在软件开发中有时需要在一个软件中启动另一个软件,这时用Process.Start(“软件路径”)可以启动另一个软件.如果在这个过程中还需要传递一些参数给新启动 ...

  8. jsp 页面间传递参数

    JSP页面间传递参数是经常需要使用到的功能,有时还需要多个JSP页面间传递参数.下面介绍一下实现的方法. (1)直接在URL请求后添加 如:< a href="thexuan.jsp? ...

  9. Jmeter 跨线程组传递参数 之两种方法

    终于搞定了Jmeter跨线程组之间传递参数,这样就不用每次发送请求B之前,都需要同时发送一下登录接口(因为同一个线程组下的请求是同时发送的),只需要发送一次登录请求,请求B直接用登录请求的参数即可,直 ...

随机推荐

  1. mongodb--Profiling慢查询详解

    官方查询地址:https://docs.mongodb.com/v3.2/tutorial/manage-the-database-profiler/ 在很多情况下,DBA都要对数据库的性能进行分析处 ...

  2. log4j.properties配置说明学习网址

    https://blog.csdn.net/wangzhaotongalex/article/details/51308802

  3. Flume 拦截器(interceptor)详解

    flume 拦截器(interceptor)1.flume拦截器介绍拦截器是简单的插件式组件,设置在source和channel之间.source接收到的事件event,在写入channel之前,拦截 ...

  4. Hive函数以及自定义函数讲解(UDF)

    Hive函数介绍HQL内嵌函数只有195个函数(包括操作符,使用命令show functions查看),基本能够胜任基本的hive开发,但是当有较为复杂的需求的时候,可能需要进行定制的HQL函数开发. ...

  5. HanLP中的人名识别分析详解

    在看源码之前,先看几遍论文<基于角色标注的中国人名自动识别研究> 关于命名识别的一些问题,可参考下列一些issue: u u名字识别的问题 #387 u u机构名识别错误 u u关于层叠H ...

  6. 红外协议之NEC协议

    NEC协议载波:38khz 其逻辑1与逻辑0的表示如图所示: 逻辑1为2.25ms,脉冲时间560us:逻辑0为1.12ms,脉冲时间560us.所以我们根据脉冲时间长短来解码.推荐载波占空比为1/3 ...

  7. IDEA中使用springBoot+gradle构建多模块项目

    https://blog.csdn.net/forMelo/article/details/78995875

  8. Ubuntu中编译helloworld驱动

    1. 新建hello文件夹 2.hello.c #ifndef __KERNEL__ # define __KERNEL__ #endif #ifndef MODULE # define MODULE ...

  9. Centos7安装WPS和截图工具shutter

    centos7安装WPS 1..在wps官网上下载rpm安装包 2..rpm包安装命令 yum install xxx[安装包的名字] 注意:执行此项命令需要root权限 3.安装完成后即可使用 Ce ...

  10. innobackupex per table

    #innobackupex export tableinnobackupex --defaults-file=/etc/my.cnf --sock=/data/3306/mysql_3306.sock ...