要想使用线程池中的线程,需要调用静态方法ThreadPool.QueueUserWorkItem,来指定线程中要调用的方法,此静态方法有两个重载版本:
public static bool QueueUserWorkItem(WaitCallback callBack);
public static bool QueueUserWorkItem(WaitCallback callBack, object state);
而上述中的WaitCallback则是一个委托对象,如下所示:
public delegate void WaitCallback(object state);
具体演示代码如下:
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading; using System.Threading.Tasks; namespace MyThread { public class ThreadDemoClass { public void Run1(object obj) { Console.WriteLine(); Console.WriteLine("Child thread working..."); Console.WriteLine("Child thread ID is:" + Thread.CurrentThread.ManagedThreadId.ToString()); } public void Run2(object obj) { string name = obj as string; Console.WriteLine(); Console.WriteLine("Child thread working..."); Console.WriteLine("My name is " + name); Console.WriteLine("Child thread ID is:" + Thread.CurrentThread.ManagedThreadId.ToString()); } public void Run3(object obj) { UserInfo userInfo = (UserInfo)obj; Console.WriteLine(); Console.WriteLine("Child thread working..."); Console.WriteLine("My name is " + userInfo.Name); Console.WriteLine("I'm " + userInfo.Age + " years old this year"); Console.WriteLine("Child thread ID is:" + Thread.CurrentThread.ManagedThreadId.ToString()); } } }
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace MyThread { public class UserInfo { public string Name { get; set; } public int Age { get; set; } } }
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading; using System.Threading.Tasks; namespace MyThread { class Program { static void Main(string[] args) { ThreadDemoClass demoClass = new ThreadDemoClass(); ThreadPool.SetMinThreads(1, 1); //无参数 ThreadPool.QueueUserWorkItem(demoClass.Run1); //有参数 ThreadPool.QueueUserWorkItem(demoClass.Run2, "123"); UserInfo userInfo = new UserInfo(); userInfo.Name = "张三"; userInfo.Age = 18; //自定义类型参数 ThreadPool.QueueUserWorkItem(demoClass.Run3, userInfo); Console.ReadKey(); } } }