C# 启动线程

最详细的介绍了两种
http://www.cnblogs.com/xiaoyaozhe/archive/2011/11/10/2244110.html


http://www.cnblogs.com/lenovo_tiger_love/archive/2010/01/07/1641206.html

一、 最常见的就是使用参数为 ThreadStart类型的线程构造函数

Thread t = new Thread(new ThreadStart(FunctionName));

可以写成 Thread t = new Thread(FunctionName); 这就是最基本的创建线程方法。但是ThreadStart是无参数的委托类型,这种方法也就不能直接给线程函数传递参数。但是线程函数可以直接访问他所在的类中的其他成员变量,参数可以设置在其他成员变量中,让线程函数去读取。

二、 使用参数为 ParameterizedThreadStart类型的线程构造函数

Thread t = new Thread(new ParameterizedThreadStart(FunctionName));

ParameterizedThreadStart也是一个委托类型,其委托的函数必须带一个object类型的参数。虽然只带一个object类型参数,但是可以把N个参数都包装进一个类对象,通过这个object参数直接把该对象传给线程,也就相当于传了N个参数,不过多了包装这步。


[color=red]线程池[/color]
using System;
using System.Threading;
class ThreadTest
{

public static void Main(){
MyThread mt=new MyThread();
//Thread t0=new Thread(new ThreadStart(method1));
//Thread t1=new Thread(new ThreadStart(method2));
//Thread t2=new Thread(new ThreadStart(mt.method3));
//t0.Start();
//t1.Start();
//t2.Start();
//以上注释掉的就是正常线程创建与使用的方法
//以下是使用线程池进行系统自动管理后台线程

ThreadPool.QueueUserWorkItem(new WaitCallback(method1));
ThreadPool.QueueUserWorkItem(new WaitCallback(method2));
ThreadPool.QueueUserWorkItem(new WaitCallback(mt.method3));
//因为线程池创造线程属于守护线程,前台停止自然后台也停止,所以
//使用ReadLine()阻塞,查看结果
Console.ReadLine();
}
public static void method1(Object stateInfo){
//使用线程池必备参数Object
//没有这个参数使用线程池编译不过,应该是发送前台消息的一个参数
for(int i=0;i<1000;i++)
{
Console.Write("a");
Thread.Sleep(10);
}
}
public static void method2(Object stateInfo){
for(int i=0;i<1000;i++){
Console.Write("b");
Thread.Sleep(10);
}

}
}

class MyThread{

public void method3(Object stateInfo){
for(int i=0;i<1000;i++){
Console.Write("C");
}
}
}
[color=red]给线程传递参数:
ThreadPool.QueueUserWorkItem(callBack,
"Decrease stock of monkey wrench"); [/color]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值