标签:线程 back ges console 需要 ext 主线程 man string
1.Thread类提供了两个构造实例,一个是接受输入参数的委托,一个不需要输入参数的委托
2.分别创建两个线程如
//初始化线程实例 Thread thread = new Thread(() => { Thread cThread = Thread.CurrentThread; cThread.Name = "thread"; Console.WriteLine("启动线程不需要传递数据线程信息:id:{0}/name:{1}/state:{2}", cThread.ManagedThreadId, cThread.Name, cThread.ThreadState); }); thread.Start(); //初始化线程实例 提供参数 Thread threadWithPara = new Thread(x => { Thread cThread = Thread.CurrentThread; Console.WriteLine("启动线程需要传递数据线程信息:id:{0}/name:{1}/state:{2}/paraData:{3}", cThread.ManagedThreadId, cThread.Name, cThread.ThreadState, x); }); threadWithPara.Name = "threadWithPara"; threadWithPara.Start("objectData");
输出:
clr将每个线程要么视为前台线程,要么视为后台线程。当一个进程的所有前台线程执行完成,主程序运行结束,不管后台线程有没有执行完毕都会被终止且不会抛出异常。
以下代码演示了前台和后台线程之间的差异:
public static void RunDiff() { BackgroundTest(); ForegroundTest(); Console.WriteLine("主线程执行结束"); } public static void BackgroundTest() { Thread backgroundThread = new Thread((objectData) => { //模式1秒的其他工作 因为是后台线程不会执行到这里 Thread.Sleep(1000); Console.WriteLine("输入出后台线程参数:" + objectData.ToString()); }); //使线程成为后台线程 backgroundThread.IsBackground = true; backgroundThread.Start("hi backgroundThread"); } public static void ForegroundTest() { //创建线程(默认为前台线程) Thread backgroundThread = new Thread((objectData) => { //Thread.Sleep(2000); // 如果把屏蔽去掉 后台线程输出将会看到。 Console.WriteLine("输入出 前台线程参数:" + objectData.ToString()); }); backgroundThread.Start("hi foregroundThread"); }
标签:线程 back ges console 需要 ext 主线程 man string
原文地址:http://www.cnblogs.com/chengtian/p/7136968.html