zoukankan      html  css  js  c++  java
  • c#多线程 Invoke方法的使用<转>

    在多线程编程中,我们经常要在工作线程中去更新界面显示,而在多线程中直接调用界面控件的方法是错误的做法,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;
            }

  • 相关阅读:
    ....
    CodeForces 375A(同余)
    POJ 2377 Bad Cowtractors (最小生成树)
    POJ 1258 AgriNet (最小生成树)
    HDU 1016 Prime Ring Problem(全排列)
    HDU 4460 Friend Chains(bfs)
    POJ 2236 Wireless Network(并查集)
    POJ 2100 Graveyard Design(尺取)
    POJ 2110 Mountain Walking(二分/bfs)
    CodeForces 1059B Forgery(模拟)
  • 原文地址:https://www.cnblogs.com/kingwangzhen/p/1654939.html
Copyright © 2011-2022 走看看