如下面代码所示,这个委托是不是相当于建立了一个后台子线程?
delegate int ChangeColorDelegate();
........
ChangeColorDelegate d1 = ChangeColor;
IAsyncResult a1 = d1.BeginInvoke(null, null);
.......        public int ChangeColor()
        {
            .
            .
            return 1;
        }
执行好后,要手动关闭这个委托吗,还是它自己自动关闭?

解决方案 »

  1.   


    28.简单委托示例.
        public delegate void test(string t1);    public void t1(string p1)
        {
            p1 = "t1";
            Response.Write(p1);
            Response.Write("\r\n");
        }
        public void t2(string p2)
        {
            p2 = "t2";
            Response.Write(p2);
        }
        protected void Page_Load(object sender, EventArgs e)
        {    }
        protected void Button1_Click(object sender, EventArgs e)
        {
            //声明
            test delegateOjb;
            //关联方法
            delegateOjb = t1;
            delegateOjb += t2;
            //需传参才可调用.
            delegateOjb("begin");
            
        }委托实际上据我理解有两个用处:
    1.将方法当作参数来调用。
    2.类似于c++里面的指针,在调用c++写的dll文件里的方法时很好用,可以准确地指向内存中的地址。
      

  2.   

    IAsyncResult a1 = d1.BeginInvoke(null, null); 这是另启了一个工作线程
      

  3.   

    执行好后,要手动关闭这个委托吗,还是它自己自动关闭?委托不存在关闭问题。由clr来自动管理的
      

  4.   

    口误,应该是调用DLL里面有指针类型参数的方法。
      

  5.   

    谢谢,我在书上也看到过,说“委托是方法的类型安全的引用。Delegate类还支持异步调用方法。在后台,Delegate类会创建一个执行任务的线程。委托使用线程池来完成异步任务”
      

  6.   

    IAsyncResult a1 = d1.BeginInvoke(null, null); 这就是异步啊