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

一步一步学习C#中的多线程 --- 1、初识线程(2)--给线程传递参数

给线程传递参数的三种方法

1、一种方式是使用ParameterizedThreadStart委托参数的Thread构造函数。参看如下代码:

 

 1:  using System;
 2:  using System.Collections.Generic;
 3:  using System.Linq;
 4:  using System.Text;
 5:  using System.Threading;
 6:  using System.Threading.Tasks;
 7:  namespace PassDataToThread
 8:  {
 9:      class Program
10:      {
11:          static void Main(string[] args)
12:          {
13:              Thread t1 = new Thread(printMessage);//省略写法
14:              Thread t2 = new Thread(new ParameterizedThreadStart(printMessage));//完整写法
15:              t1.Start("Hello MultThread!!");//传递参数
16:              t2.Start("Hello MuttThread");//传递参数
17:              Console.ReadKey();
18:          }
19:   
20:          static void printMessage(Object message)
21:          {
22:              string strMessage = (string)message;
23:              Console.WriteLine(strMessage);
24:          }
25:      }
26:  }
27:   
28:   

 

注意:   ParameterizedThreadStart 传递参数个数有限制,只能接收一个参数,并且由于其类型为object,通常需要转型。

2、使用Lambda表达式或匿名函数传递参数。参看如下代码:

 

 1:  using System;
 2:  using System.Collections.Generic;
 3:  using System.Linq;
 4:  using System.Text;
 5:  using System.Threading;
 6:   
 7:  namespace PassDataToThread
 8:  {
 9:      class Program
10:      {
11:          static void Main(string[] args)
12:          {
13:              Thread t1 = new Thread(() => Print("Hello Lambda Thread"));//通过Lambda传递参数
14:              t1.Start();
15:  
16:              Thread t2 = new Thread(delegate(){Print("Hello Delegate Method");});//通过匿名函数传递参数
17:              t2.Start();
18:          }
19:          static void Print(string message) {
20:              Console.WriteLine(message);
21:              Console.ReadKey();
22:          }
23:      }
24:  }
25:   
26:   

 

其实如果你查看编译后的代码会发现,这两种方法底层的实现方法是和第一种方法一致的。

3、定义一个类,将线程的主方法定义为类的一个实例方法。这样你就可以给Thread的构造函数传递对象和ThreadMain()方法。线程就可以访问数据了。

 

 1:  using System;
 2:  using System.Collections.Generic;
 3:  using System.Linq;
 4:  using System.Text;
 5:  using System.Threading;
 6:   
 7:  namespace PassDataToThread2
 8:  {
 9:      class Program
10:      {
11:          static void Main(string[] args)
12:          {
13:              MyThread mt = new MyThread("HelloWorld");
14:              Thread t1 = new Thread(mt.ThreadMain);
15:              t1.Start();
16:              Console.ReadKey();
17:          }
18:      }
19:   
20:      class MyThread
21:      {
22:          private string message;
23:          public MyThread(string message) 
24:          {
25:              this.message = message;
26:          }
27:          public void ThreadMain() 
28:          {
29:              Console.WriteLine(message);
30:          }
31:      }
32:  }

转载于:https://www.cnblogs.com/xiangyun/archive/2011/03/21/1990847.html

相关文章:

  • PL/SQL是什么
  • DDL触发器学习整理
  • quote symbol expected
  • SQL语句新建用户、对用户授权、删除用户实例
  • android文件下载!download!
  • SQL Server 2008 表变量参数(表值参数)用法
  • Java类加载器加载类顺序
  • UML类图小结
  • 系统动力学软件vensim之指数增长
  • 系统动力学软件vensim学习之一阶负反馈
  • 数字水印学习教程
  • Nature Science 2010-2011年全部期刊下载链接
  • QTE安装汉化添加新程序全过程
  • 努力我可以
  • linux 与 虚拟机共享数据
  • 【翻译】babel对TC39装饰器草案的实现
  • canvas 绘制双线技巧
  • Create React App 使用
  • CSS相对定位
  • js
  • js正则,这点儿就够用了
  • Linux快速复制或删除大量小文件
  • Rancher-k8s加速安装文档
  • ReactNativeweexDeviceOne对比
  • React系列之 Redux 架构模式
  • use Google search engine
  • 关于Java中分层中遇到的一些问题
  • 坑!为什么View.startAnimation不起作用?
  • 买一台 iPhone X,还是创建一家未来的独角兽?
  • 腾讯优测优分享 | 你是否体验过Android手机插入耳机后仍外放的尴尬?
  • 用Visual Studio开发以太坊智能合约
  • Semaphore
  • ​Distil-Whisper:比Whisper快6倍,体积小50%的语音识别模型
  • #《AI中文版》V3 第 1 章 概述
  • #常见电池型号介绍 常见电池尺寸是多少【详解】
  • #我与Java虚拟机的故事#连载04:一本让自己没面子的书
  • (2)MFC+openGL单文档框架glFrame
  • (4)事件处理——(7)简单事件(Simple events)
  • (Spark3.2.0)Spark SQL 初探: 使用大数据分析2000万KF数据
  • (附源码)python旅游推荐系统 毕业设计 250623
  • (附源码)ssm码农论坛 毕业设计 231126
  • (六)库存超卖案例实战——使用mysql分布式锁解决“超卖”问题
  • (全部习题答案)研究生英语读写教程基础级教师用书PDF|| 研究生英语读写教程提高级教师用书PDF
  • (四)图像的%2线性拉伸
  • (一)Linux+Windows下安装ffmpeg
  • (转)母版页和相对路径
  • .\OBJ\test1.axf: Error: L6230W: Ignoring --entry command. Cannot find argumen 'Reset_Handler'
  • .gitignore文件---让git自动忽略指定文件
  • .java 9 找不到符号_java找不到符号
  • .NET MVC之AOP
  • @ConditionalOnProperty注解使用说明
  • [ 攻防演练演示篇 ] 利用通达OA 文件上传漏洞上传webshell获取主机权限
  • [20171106]配置客户端连接注意.txt
  • [BZOJ1060][ZJOI2007]时态同步 树形dp
  • [C#]DataTable常用操作总结【转】