using System; namespace WindowsApplication1 { /// <summary> /// Summary description for UrlFetcher. /// </summary>
public class MyClass{ // for method 1 private string _parameter; public MyClass(string parameter){ this._parameter = parameter; } public void MyMethod1(){ if(this._parameter!=null){ // do something Console.Write(this._parameter); } } // for method 2 public MyClass(){} // this method is private,But it can be public or other private void MyMethod2(string parameter){ // do something Console.Write(parameter); } // Because delegate WaitCallback's parameter Type is object // I will convert it to string. public void MyMethod2(object parameter){ this.MyMethod2((string)parameter); }
// for method 3 public string MyMethod3(string parameter){ return "参数值为:"+parameter; } // for mutil-parameters passed public string MyMutilParameters(string param1,string param2){ return "参数1和参数2连接结果为:"+param1+param2; } } }
我们首先可以看看MSDN对ThreadPool是怎么形容的,Provides a pool of threads that can be used to post work items, process asynchronous I/O, wait on behalf of other threads, and process timers.查看它的方法集合其中有一个叫:QueueUserWorkItem 的方法,该类以及该方法的详细信息请参考MSDN相关帮助。这里需要注意的就是QueueUserWorkItem方法的参数,参数WaitCallback是一个委托类型,第二个参数就是该委托实例(用函数实例化以后,也就是一个函数)所需要的参数,是object类型的。详细内容请看下面的代码。
// passed parameter to thread by ThreadPool
private void button2_Click(object sender, System.EventArgs e) { MyClass instance = new MyClass(); ThreadPool.QueueUserWorkItem (new WaitCallback (instance.MyMethod2),myParameter); }