线程操作主要用到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. 日志插件 log4net 的配置和使用

    文本格式说明 可以记载的日志类别包括:FATAL(致命错误).ERROR(一般错误).WARN(警告).INFO(一般信息).DEBUG(调试信息). 文本参数说明 %m(message):输出的日志 ...

  2. VS打包项目详细解析

       使用VS打包项目,其实很多简单.微软官方文档很详尽,故不再细述,只列出相关链接 1创建安装项目 如何:创建或添加部署项目 2 添加项目输出 如何:向部署项目中添加项 3添加用户界面 部署中的用户 ...

  3. oracle-对象表-外部表

    http://www.blogjava.net/decode360/archive/2008/10/16/286802.html create or replace type person as ob ...

  4. 将数组A中的内容和数组B中的内容进行交换。(数组一样大)

    将两个数组中的内容相互交换,必须是两个数组的内容一样大小. 思路: 结合两个整型变量之间的交换,同样可以用于内容一样大的数组.用异或关系相互交换. #include<stdio.h> in ...

  5. .Net培训班课程体系

    .Net培训 第一部分:.Net基础 .Net基础:数据类型.变量.运算符.分支结构.循环结构.方法.反编译器.递归.递归算法的非递归优化: 面向对象:异常.封装继承多态.单例模式.装饰者设计模式.t ...

  6. 通过plsql develop查看建表语句

    右键--查看 右下角 如下显示,找出ddl语句 可以看到索引等

  7. day7大纲

    01 昨日内容回顾 数据类型补充: str <---> list split join list <---> set set(list) list(set()) list &l ...

  8. JavaScript数组的一些奇葩行为

    今天,复习了一下JavaScript的数组,然后,把他的一些奇葩行为总结了一下,在这里和大家share一下,如果有不对的地方,欢迎指出! 奇葩1:Array()构造器函数可以不使用new关键字进行调用 ...

  9. SyntaxError: Non-ASCII character '\xe4' in file t.py on line 3, but no encoding declared

    问题 报错代码 #!/usr/bin/python s = "你好" print s 执行报错: File "t.py", line 3 SyntaxError ...

  10. Linux下nohup日志输出过大问题解决方案

    转载自:http://blog.csdn.net/shawnhu007/article/details/50971084 最近在一hadoop测试集群运行一个spark streaming程序,然后使 ...