先看微软如何给出的方法使用,如下查看,我们发现,如下两个委托,分别对应带参数创建线程 和 不带参数创建线程。


下列 委托 方法不带参数 ThreadStart

namespace System.Threading
{
// 摘要:
// 表示在 System.Threading.Thread 上执行的方法。
[ComVisible(true)]
public delegate void ThreadStart();
}
 
//ParameterizedThreadStart 带参数,参数为 object 类型,这就要求我们写的 函数(被委托的),输入参数是object
namespace System.Threading
{
// 摘要:
// 表示在 System.Threading.Thread 上执行的方法。
//
// 参数:
// obj:
// 包含该线程过程的数据的对象。
[ComVisible(false)]
public delegate void ParameterizedThreadStart(object obj);
}
 

如下,我们可以先定义一个简单的ShowMessage()方法,不带参数。
{

    public class Message

    {

        public void ShowMessage()

        {

            string message = string.Format("Async threadId is :{0}",

                                            Thread.CurrentThread.ManagedThreadId);

            Console.WriteLine(message);

            for (int n = ; n < ; n++)

            {

                Thread.Sleep();

                Console.WriteLine("The number is:" + n.ToString());

                Console.WriteLine("OK!");

            }

        }

    }

//主函数调用时

class Program

    {

        static void Main(string[] args)

        {

            Console.WriteLine("Main threadId is:" +

                              Thread.CurrentThread.ManagedThreadId);

            Message message = new Message();

            //Thread thread = new Thread(message.ShowMessage);              //委托绑定 ShowMessage()方法, 下列是通过 ThreadStart 委托绑定, 为什么这么写,后面有介绍

            Thread thread = new Thread(new ThreadStart(message.ShowMessage));  //通过ThreadStart委托绑定Message对象的ShowMessage()方法,该句

            thread.Start();                  //Start() 启动的线程默认在前台执行

                    //thread.IsBackground = true;         //将线程放到后台,这时应用程序域将在主线程完成时就被卸载,而不会等待异步线程的运行
Console.WriteLine("Do something ..........!"); Console.WriteLine("Main thread working is complete!"); } } }

同样我们可以利用 ParameterizedThreadStart 创建带参数的线程。
public class Person

    {

        public string Name

        {

            get;

            set;

        }

        public int Age

        {

            get;

            set;

        }

    }

    public class Message

    {

        public void ShowMessage(object person)

        {

            if (person != null)

            {

                Person _person = (Person)person;

                string message = string.Format("\n{0}'s age is {1}!\nAsync threadId is:{2}",

                    _person.Name, _person.Age, Thread.CurrentThread.ManagedThreadId);

                Console.WriteLine(message);

            }

            for (int n = ; n < ; n++)

            {

                Thread.Sleep();

                Console.WriteLine("The number is:" + n.ToString());

            }

        }

    }

    class Program

    {

        static void Main(string[] args)

        {

            Console.WriteLine("Main threadId is:" + Thread.CurrentThread.ManagedThreadId);

            Message message = new Message();

            //绑定带参数的异步方法

            Thread thread = new Thread(new ParameterizedThreadStart(message.ShowMessage));

            //Thread thread2 = new Thread((message.ShowMessage));

            Person person = new Person();

            person.Name = "Jack";

            person.Age = ;

            thread.Start(person);  //启动异步线程 

            Console.WriteLine("Do something ..........!");

            Console.WriteLine("Main thread working is complete!");

                     //Thread.Sleep(100000);
thread.Join();
} }

 

如上的都能实现如下图的结果:

添加,Thread.Sleep(5000);此时应用程序域将在主线程运行5秒后自动结束

为什么我们可以用 Thread()直接调用方法呢,我们按F12查看 Thread() 微软给出的定义。

如下,Thread 的方法重载,就是调用的 有参数的 和 无参数的 委托

谢谢阅读!分享共进步!

多线程之 ThreadStart 和 ParameterizedThreadStart 委托的更多相关文章

  1. C# 多线程编程 ThreadStart ParameterizedThreadStart

    原文地址:http://club.topsage.com/thread-657023-1-1.html 在实例化Thread的实例,需要提供一个委托,在实例化这个委托时所用到的参数是线程将来启动时要运 ...

  2. ThreadStart和ParameterizedThreadStart区别

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

  3. C# ThreadStart和ParameterizedThreadStart区别

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

  4. C#中 ThreadStart和ParameterizedThreadStart区别

    最主要区别: 1.Thread 是启动一个线程,但是没有参数. 2.ParameterThreadStart  线程可以接受一个输入参数 ThreadStart: ThreadStart这个委托定义为 ...

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

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

  6. ThreadStart 与ParameterizedThreadStart的区别

    1) ParameterizedThreadStart与ThreadStart 1 static void Main(string[] args) { #region ParameterizedThr ...

  7. 那些年我们一起追逐的多线程(Thread、ThreadPool、委托异步调用、Task/TaskFactory、Parallerl、async和await)

    一. 背景 在刚接触开发的头几年里,说实话,根本不考虑多线程的这个问题,貌似那时候脑子里也有没有多线程的这个概念,所有的业务都是一个线程来处理,不考虑性能问题,当然也没有考虑多线程操作一条记录存在的并 ...

  8. C#多线程之基础篇1

    在多线程这一系列文章中,我们将讲述C#语言中多线程的相关知识,在多线程(基础篇)中我们将学习以下知识点: 创建线程 中止线程 线程等待 终止线程 确定线程的状态 线程优先级 前台线程和后台线程 向线程 ...

  9. 快速入门系列--CLR--02多线程

    最近,由于基础框架的整体升级,因此需要更新所有相关项目的DLL文件.这个过程存在不小的风险,因此也对发布后的生产服务器进行了密切的监控,结果还是出现了个别应用出现异常的情况,很快的占用了大量的服务器内 ...

随机推荐

  1. HDU 4686 Arc of Dream (2013多校9 1001 题,矩阵)

    Arc of Dream Time Limit: 2000/2000 MS (Java/Others)    Memory Limit: 65535/65535 K (Java/Others)Tota ...

  2. hdu4035之经典慨率DP

    Maze Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65768/65768 K (Java/Others) Total Submi ...

  3. Effective JavaScript Item 51 在类数组对象上重用数组方法

    Array.prototype对象上的标准方法被设计为也能够在其他对象上重用 - 即使不是继承自Array的对象. 因此,在JavaScript中存折一些类数组对象(Array-like Object ...

  4. .NET 4.5 is an in-place replacement for .NET 4.0

    With the betas for .NET 4.5 and Visual Studio 11 and Windows 8 shipping many people will be installi ...

  5. XmlnsDefinitionAttribute Is Pretty Nifty

    When we want to declaratively use our custom controls or reference the types we defined in XAML, we ...

  6. iTextSharp 合并PDF后,无法删除已经合并的单个文件

    private void MergePDFFiles(string[] fileList, string outMergeFile) { List<PdfReader> readerLis ...

  7. [Todo]很不错的Java面试题类型整理,要看

    http://www.importnew.com/21445.html 1. 问,以下,会返回什么. public int func() { int ret = 0; try{ throw new E ...

  8. SPSS19.0实战之多元线性回归

    线性回归数据来自于国泰安数据服务中心的经济研究数据库.网址:http://www.gtarsc.com/p/sq/.数据名称为:全国各地区能源消耗量与产量,该数据的年度标识为2006年,地区包括我国3 ...

  9. Android -- ListView与Adapter

    ListView在Android中有着很重要的作用.Android开发中ListView是比较常用的组件,它以列表的形式展示具体内容,并且能够根据数据的长度自适应显示. 背景              ...

  10. FrameWork数据权限浅析1之基于手工修改模型实现行级数据安全

    1:环境 Cognos10.2.0,Oracle 2:实现过程 在设置Framework数据级别权限的时候,通常用到的就是在FM的设置数据安全的地方添加安全过滤器,如下图 step1:选中部门维度表→ ...