C#中 ThreadStart和ParameterizedThreadStart区别
最主要区别:
1.Thread 是启动一个线程,但是没有参数。
2.ParameterThreadStart 线程可以接受一个输入参数
ThreadStart:
ThreadStart这个委托定义为void ThreadStart(),也就是说,所执行的方法不能有参数。
ThreadStart threadStart=new ThreadStart(ProcessData);
Thread thread=new Thread(threadStart);
thread.Start();
public void SayHelloToXiaohouye()
{
string strName="My name is Xiaohouye"; Console.Write("Hello "+strName);
}
上面很简单的例子,我们用定义了一个ThreadStart类型的委托,这个委托制定了线程需要执行的方法: SayHelloToXiaohouye,在这个方法里声明一个变量,并输出.这就构成了最简单的多线程的例子,一般情况下,我们都是用这个的。
ParameterThreadStart:
ParameterThreadStart的定义为void ParameterizedThreadStart(object state),使用这个这个委托定义的线程的启动函数可以接受一个输入参数,具体例子如下 :
ParameterizedThreadStart threadStart=new ParameterizedThreadStart(SayHelloToXiaohouye)
Thread thread=new Thread() ;
thread.Start("Xiaohouye"); //注意参数一定要用object 类型,否则报错
public void SayHelloToXiaohouye(object name)
{ //使用时候需要转换
Console.Write("Hello my name is {0}",name.ToString());
}
看了一个参数的例子,下面我们来看下多个参数的例子
,我们通过把多个参数组合到一个类中,然后把这个类的实例作为参数传递,就可以实现多个参数传递,废话不多说,看代码:
public class AddParameter
{
public string a=string.Empty; public string b=string.Empty; public AddParameter(string name1, string name2)
{
a = name1;
b = name2;
}
}
#endregion class Program
{
static void Main(string[] args)
{
Console.WriteLine("***** Adding with Thread objects *****");
Console.WriteLine("当前线程为:{0}", Thread.CurrentThread.ManagedThreadId); AddParameter p = new AddParameter("xiaohouye", "xiaowangzi");
Thread t = new Thread(new ParameterizedThreadStart(Add));
t.Start(p);
Console.ReadLine();
} #region Add method //组合参数
static void Add(object data)
{
if (data is AddParams)
{
Console.WriteLine("当前线程为:{0}",Thread.CurrentThread.ManagedThreadId); AddParameter ap = (AddParameter )data;
Console.WriteLine("{0} + {1} is {2}", ap.a, ap.b, ap.a + ap.b);
}
}
#endregion
}
}
C#中 ThreadStart和ParameterizedThreadStart区别的更多相关文章
- C# 最基本的涉及模式(单例模式) C#种死锁:事务(进程 ID 112)与另一个进程被死锁在 锁 | 通信缓冲区 资源上,并且已被选作死锁牺牲品。请重新运行该事务,解决方案: C#关闭应用程序时如何关闭子线程 C#中 ThreadStart和ParameterizedThreadStart区别
C# 最基本的涉及模式(单例模式) //密封,保证不能继承 public sealed class Xiaohouye { //私有的构造函数,保证外部不能实例化 private ...
- ThreadStart和ParameterizedThreadStart区别
ThreadStart: ThreadStart这个委托定义为void ThreadStart(),也就是说,所执行的方法不能有参数. ThreadStart threadStart=new Thre ...
- C# ThreadStart和ParameterizedThreadStart区别
ThreadStart: ThreadStart这个委托定义为void ThreadStart(),也就是说,所执行的方法不能有参数.ThreadStart threadStart=new Threa ...
- 正则匹配中 ^ $ 和 \b 的区别
正则匹配中 ^ $ 和 \b 的区别 ^和$分别代表字符串的开始和结束,因此^\d$只能匹配包含一个数字的字符串\b代表单词边界,其前后必须是不同类型的字符,可以组成单词的字符为一种类型,不可 ...
- java中ArrayList 、LinkList区别
转自:http://blog.csdn.net/wuchuanpingstone/article/details/6678653 个人建议:以下这篇文章,是从例子说明的方式,解释ArrayList.L ...
- 数据库中MyISAM与InnoDB区别
数据库中MyISAM与InnoDB区别 首页 » DIY技术区 » 数据库中MyISAM与InnoDB区别 09:57:40 MyISAM:这个是默认类型,它是基于传统的ISAM类型,ISAM是I ...
- socket网络编程中read与recv区别
socket网络编程中read与recv区别 1.read 与 recv 区别 read 原则: 数据在不超过指定的长度的时候有多少读多少,没有数据则会一直等待.所以一般情况下:我们读取数据都需要采用 ...
- 详解 $_SERVER 函数中QUERY_STRING和REQUEST_URI区别
详解 $_SERVER 函数中QUERY_STRING和REQUEST_URI区别 http://blog.sina.com.cn/s/blog_686999de0100jgda.html 实例: ...
- java 中 ==和equals 的区别
Java中equals和==的区别 java中的数据类型,可分为两类: 1.基本数据类型,也称原始数据类型.byte,short,char,int,long,float,double,boolea ...
随机推荐
- IISExpress 开放局域网访问
1. 设置 IISExpress 配置文件 applicationhost.config VS2015 :这个配置文件 在工程目录下的 .vs/config 隐藏目录 其他版本 :在用户目录中的 II ...
- I.MX6 Ar8031 device register hacking
/***************************************************************************** * I.MX6 Ar8031 device ...
- Texas Instruments matrix-gui-2.0 hacking -- helper_functions.php
<?php # PHP_SELF: 但前正在执行脚本的文件名,与document root相关 # QUERY_STRING: 查询(query)的字符串 $cachefile = " ...
- TP框架连接mongodb报错及解决办法
mongodb版本3.4.7 1.认证错误:Failed to connect to: localhost:27017: Authentication failed on database 'test ...
- es6语法快速上手(转载)
一.相关背景介绍 我们现在大多数人用的语法javascript 其实版本是ecmscript5,也是就es5.这个版本己经很多年了,且完美被各大浏览器所支持.所以很多学js的朋友可以一直分不清楚es5 ...
- day41 mysql 学习 练习题 重要*****
MySQL 练习题[二1.表如下: 收获和注意点:***** #1 GROUP by 可以放到where s_id in ()条件局后边 GROUP BY s_id having 详见题12 #2 做 ...
- Zxing图片拉伸解决 Android 二维码扫描
版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/aaawqqq/article/details/24852915 二维码扫描 Android Zx ...
- Revit API 加载族并生成实例图元
在Revit API中加载族可以使用Doc.LoadFamily方法,传入要加载的族文件路径名,但是这种方式有一种缺点,就是如果族文件在当前工程中没有加载的话则返回成功,如果已经加载过,则返回失败,也 ...
- Oracle 10g RAC OCR 和 VotingDisk 的备份与恢复
Oracle RAC 中OCR 和Voting Disk 备份在我的blog: Oracle RAC 常用维护工具和命令 中已经有说明,现在再次把它单独拿出做一个说明, 因为OCR 和Voting D ...
- handler之责任链模式
https://www.cnblogs.com/java-my-life/archive/2012/05/28/2516865.html