Thread t = new Thread(new ParameterizedThreadStart(b));
其中b如果是2个参数的方法,怎么办。好像不可以new 自己写的委托。求解释

解决方案 »

  1.   

    Thread t = new Thread(new ParameterizedThreadStart(b,object[] paras));
      

  2.   

    我告诉你一个通用的设计模式。你可以设计一个专门用于通讯的类型,例如public class B_Process
    {
        public string param1;
        public int param2;
        public event Action param3
        ........    public void b()
        {
            ......
        }
    }也就是说,原来的方法b可以重新设计封装为一个对象,方法b内部就可以使用this.param1、this.param2这样的方法去得到参数,甚至触发param3事件。而调用者只是记得先要new这个类型对象实例而已。例如var x= new B_Process{ param1="a", param2=1};
    Thread t = new Thread(new ParameterizedThreadStart(x.b));
      

  3.   

    而你的问题,实际上也可以使用匿名委托来轻松编写。例如        Thread t = new Thread(new ParameterizedThreadStart(x =>
            {
                b(param1,param2);
            }));直接使用委托之前定义的变量,根本无需顾及ParameterizedThreadStart有几个参数!其实匿名委托跟上述单独设计新的类型是完全一样的做法,只不过是c#编译器给你自动产生的。即时你编写.net2.0的程序,只要你使用比较高级的代发工具,例如vs2010或者vs2008,它都是支持的。
      

  4.   

    有人说匿名委托、lamda等等是.net2.0无法支持的。这是不对的。它是c#的语法糖,跟.net版本没有关系。只要你的c#编译器(开发环境)升级了,即使你编写.net2.0也照样可以使用比较优雅的新语法来写程序。
      

  5.   

    谢谢,这个方法很好用,但是可以问下问题么x =>
            {
                b(param1,param2);
            }这是个什么语法,没学过呢x代表什么=>又是什么
      

  6.   

    可以这样:
    B方法只使用一个参数   b(object param)Thread t = new Thread(new ParameterizedThreadStart(b));
    t.Start(new string[2] {参数1,参数2});b内部
    string[] pa=(string [])param;