按MSDN上的介绍是不是应该理解为,在主调线程上启动BeginInvoke(...)后系统将"隐蔽的启动一个线程来处理这个委托实例.按照基于事件的异步编程模型来看,其只有BeginInvoke(...)而没有EndInvoke(IAsyncResult iar)他用其它方案代替了EndInvode(...)的结果返回,换句话说,委托在某种程度上封装了线程对象,即当用户调用BeginInvoke(...)时,就隐匿的启用了线程.

解决方案 »

  1.   

    使用委托的begininvoke的异步调用与启动一个新线程对操作系统是一样的,只是使用委托的begininvoke由.net运行时库在后台自动帮你做了新建线程的工作,具体可参照http://www.gbnis.com/read_file.php?id=4469&left=net_programe
      

  2.   

    系统将"隐蔽的启动一个线程来处理这个委托实例 ,那么就是说主线程不受影响咯,可是看下我一下的代码,为什么处理委托的时候,主线程没响应了呢:
    private bool deleteTest()
    {
    for(int i=0;i<10000;i++)
    for(int j=0;j<10000;j++) lmScrollText1.label1.Text = "哈哈~~ 成功了!";  return true;
    } private void timer1_Tick(object sender, System.EventArgs e)
    { test test1 = new test(deleteTest); 
               
    lmScrollText1.BeginInvoke(test1); 

    }
      

  3.   

    lmScrollText1.BeginInvoke(test1);
    改成
    test1.BegionInoke();
      

  4.   

    lincon77() 介绍的文章讲得非常好,感谢lincon77!
      

  5.   

    我也没找到下一篇,可能还没写吧。
    不过后面说的问题的解决方法可参考其它相关文章?
    http://yinh.cnblogs.com/archive/2005/05/25/162150.aspxhttp://www.yesky.com/20030225/1653758.shtml
      

  6.   

    谢谢 lincon77()  ,不过现在我的主线程在执行一些操作的时候经常莫名其妙的没了响应,不知是哪里处理不妥?比如注册远程通道的时候
    TcpChannel chan = new TcpChannel();
    try
    {
    ChannelServices.RegisterChannel(chan);

    }
    catch (Exception)
    {

    }
    finally
    {
    ChannelServices.UnregisterChannel(chan);
    }