最主要区别:

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区别的更多相关文章

  1. C# 最基本的涉及模式(单例模式) C#种死锁:事务(进程 ID 112)与另一个进程被死锁在 锁 | 通信缓冲区 资源上,并且已被选作死锁牺牲品。请重新运行该事务,解决方案: C#关闭应用程序时如何关闭子线程 C#中 ThreadStart和ParameterizedThreadStart区别

    C# 最基本的涉及模式(单例模式) //密封,保证不能继承 public sealed class Xiaohouye    { //私有的构造函数,保证外部不能实例化        private  ...

  2. ThreadStart和ParameterizedThreadStart区别

    ThreadStart: ThreadStart这个委托定义为void ThreadStart(),也就是说,所执行的方法不能有参数. ThreadStart threadStart=new Thre ...

  3. C# ThreadStart和ParameterizedThreadStart区别

    ThreadStart: ThreadStart这个委托定义为void ThreadStart(),也就是说,所执行的方法不能有参数.ThreadStart threadStart=new Threa ...

  4. 正则匹配中 ^ $ 和 \b 的区别

    正则匹配中 ^ $ 和 \b 的区别     ^和$分别代表字符串的开始和结束,因此^\d$只能匹配包含一个数字的字符串\b代表单词边界,其前后必须是不同类型的字符,可以组成单词的字符为一种类型,不可 ...

  5. java中ArrayList 、LinkList区别

    转自:http://blog.csdn.net/wuchuanpingstone/article/details/6678653 个人建议:以下这篇文章,是从例子说明的方式,解释ArrayList.L ...

  6. 数据库中MyISAM与InnoDB区别

    数据库中MyISAM与InnoDB区别 首页 » DIY技术区 » 数据库中MyISAM与InnoDB区别 09:57:40   MyISAM:这个是默认类型,它是基于传统的ISAM类型,ISAM是I ...

  7. socket网络编程中read与recv区别

    socket网络编程中read与recv区别 1.read 与 recv 区别 read 原则: 数据在不超过指定的长度的时候有多少读多少,没有数据则会一直等待.所以一般情况下:我们读取数据都需要采用 ...

  8. 详解 $_SERVER 函数中QUERY_STRING和REQUEST_URI区别

    详解 $_SERVER 函数中QUERY_STRING和REQUEST_URI区别 http://blog.sina.com.cn/s/blog_686999de0100jgda.html   实例: ...

  9. java 中 ==和equals 的区别

      Java中equals和==的区别 java中的数据类型,可分为两类: 1.基本数据类型,也称原始数据类型.byte,short,char,int,long,float,double,boolea ...

随机推荐

  1. 玩转TypeScript(5)--环境声明

    环境声明为TypeScript引入了一个作用域,但是对于产生的javaScript程序不会有任何影响.程序员可以使用环境声明来告之TypeScript,一些其他的组将将提供变量的声明.比如,默认情况下 ...

  2. bind() 函数兼容

    为了搞清这个陌生又熟悉的bind,google一下,发现javascript1.8.5版本中原生实现了此方法,目前IE9+,ff4+,chrome7+支持此方法,opera和safari不支持(MDN ...

  3. HDU 1084:What Is Your Grade?

    Problem Description "Point, point, life of student!" This is a ballad(歌谣)well known in col ...

  4. Spring Data Jpa 使用@Query标注自定义查询语句

    https://blog.csdn.net/daniel7443/article/details/51159865 https://blog.csdn.net/pp_fzp/article/detai ...

  5. LeetCode Pascal's Triangle && Pascal's Triangle II Python

    Pascal's Triangle Given numRows, generate the first numRows of Pascal's triangle. For example, given ...

  6. ECHO不换行

    我想用批处理实现向s.txt中多次分别导入文本例如:“aaaa","bbbb","cccc","dddd"实现s.txt内效果如: ...

  7. 为什么要用MQ

    现在公司系统在做微服务化,很多人在设计服务间通信时都会想到用MQ,然而有些人居然说不清楚为啥要用MQ? 其实用它主要是两点考虑: 1.应用解耦:两个服务间通过MQ通信,可以不用完全知道对方的存在,实现 ...

  8. oracle之 手动创建 emp 表 与 dept 表

    说明: 有时候我们需要通用的实验数据,emp表 与 dept表  但是数据库中有没有. 这时,我们可以手动创建. -- 创建表与数据CREATE TABLE EMP(EMPNO NUMBER(4) N ...

  9. webpack 遇到报错情况及解决

    webpack2 报错:optimize.OccurenceOrderPlugin is not a function. 原因:上个版本拼写错误,少写了一个字母r,新版本修正过来了.要写成这样:Occ ...

  10. Spring本质-AOP

    一.我们在做系统设计的时候,一个非常重要的工作就是把一个大系统做分解, 按业务功能分解成一个个低耦合.高内聚的模块,就像这样: 但是分解以后就会发现有些很有趣的东西, 这些东西是通用的,或者是跨越多个 ...