原文地址:http://www.cnblogs.com/lovko/archive/2008/12/19/1358748.html

    在多线程编程中,我们经常要在工作线程中去更新界面显示,而在多线程中直接调用界面控件的方法是错误的做法,Invoke 和 BeginInvoke 就是为了解决这个问题而出现的,使你在多线程中安全的更新界面显示。

  正确的做法是将工作线程中涉及更新界面的代码封装为一个方法,通过 Invoke 或者 BeginInvoke 去调用,两者的区别就是一个导致工作线程等待,而另外一个则不会。

  而所谓的“一面响应操作,一面添加节点”永远只能是相对的,使 UI 线程的负担不至于太大而已,因为界面的正确更新始终要通过 UI 线程去做,我们要做的事情是在工作线程中包揽大部分的运算,而将对纯粹的界面更新放到 UI 线程中去做,这样也就达到了减轻 UI 线程负担的目的了。

  再举个简单例子说明下使用方法,比如你在启动一个线程,在线程的方法中想更新窗体中的一个TextBox.. 

  

using System.Threading;

       public delegate void MyInvoke(string str);
         private void btnStartThread_Click(object sender, EventArgs e)
         {
             Thread thread = new Thread(new ThreadStart(DoWord));
             thread.Start();
         }
         public void DoWord()
         {            
             MyInvoke mi = new MyInvoke(SetTxt);
             BeginInvoke(mi,new object[]{"abc"});                
         }

        public void SetTxt(string str)
         {
             txtReceive.Text += str + System.Environment.NewLine;
         }

 

   

false。

 其它参考文章:

  •  https://msdn.microsoft.com/zh-cn/library/system.windows.forms.control.invokerequired(v=vs.100).aspx
  •  http://www.cnblogs.com/songxingzhu/p/3677307.html
  •  http://www.cnblogs.com/poorboy/archive/2013/05/09/3069997.html
  •    http://www.cnblogs.com/Rustle/articles/11301.aspx(推荐阅读)
  •    http://www.cnblogs.com/marksun/archive/2012/02/29/2373383.html(推荐阅读)
  •    http://www.cnblogs.com/whssunboy/archive/2007/06/07/775319.html(推荐阅读)

 

相关文章:

  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2021-07-15
  • 2021-07-08
  • 2021-07-31
猜你喜欢
  • 2022-12-23
  • 2022-01-22
  • 2021-11-28
  • 2022-12-23
  • 2021-11-12
相关资源
相似解决方案