.NET提供了几种创建线程并启动它的方法。那么,有两种方法(基本上):
(1)使用System.Threading.Thread
类。
Thread curr = new Thread(myfunction); curr.Start(new Object());
(2) 使用System.Threading.ThreadPool
类。
1.不带参数
ThreadPool.QueueUserWorkItem(delegate { PostDataWhenLoadData(); });
private void PostDataWhenLoadData()
{
BehaviorReturn br = _reService.SearchPrintReport(currentSo, isCount);
if (br.Success)
{
SysnAssignWhenLoad(br.ObjectList);
if (br.ObjectList.Count == 0)
{
var srMsg = new ServerMessage
{
code = "noData",
messageCN = "没有满足查询条件的数据"
};
br.MessageList.Add(srMsg);
SysnShowError(br);
}
}
else
{
SysnShowError(br);
}}
2.带参数
string ti = "";
ThreadPool.QueueUserWorkItem(new WaitCallback(ThreadProc),ti); (参数ti可以为任何类型)private void ThreadProc(object ti) //回调函数 中参数类型一定要写出成object
{
}
总结一下:
- 创建线程需要很大的开销。
- Thread是创建新的线程,而ThreadPool是从线程池中重用被挂起的闲置线程,减少了创建线程的开销。
- 使用ThreadPool的线程时,这些线程由系统管理。
- 对于多次小任务,更适合使用线程池。