• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            天下

            記錄修行的印記

            C# invoke,BeginInvoke,EndInvoke

             

            C# invoke,BeginInvoke,EndInvoke
            在多線程編程中,我們經(jīng)常要在工作線程中去更新界面顯示,而在多線程中直接調(diào)用界面控件的方法是錯(cuò)誤的做法,Invoke 和 BeginInvoke 就是為了解決這個(gè)問(wèn)題而出現(xiàn)的,使你在多線程中安全的更新界面顯示。
            正確的做法是將工作線程中涉及更新界面的代碼封裝為一個(gè)方法,通過(guò) Invoke 或者 BeginInvoke 去調(diào)用,兩者的區(qū)別就是一個(gè)導(dǎo)致工作線程等待,而另外一個(gè)則不會(huì)。
            再舉個(gè)簡(jiǎn)單例子說(shuō)明下使用方法,比如你在啟動(dòng)一個(gè)線程,在線程的方法中想更新窗體中的一個(gè)TextBox.. 

            using System.Threading;
            //啟動(dòng)一個(gè)線程 
            Thread thread=new Thread(new ThreadStart(DoWork)); 
            thread.Start(); 
            //線程方法 
            private void DoWork() 

                
            this.TextBox1.Text="我是一個(gè)文本框"

            如果你像上面操作,在VS2005或2008里是會(huì)有異常的 


            正確的做法是用Invoke\BeginInvoke
            using System.Threading;
            namespace test
            {
                
            public partial class Form1 : Form
                {
                    
            public delegate void MyInvoke(string str1,string str2);
                    
            public Form1()
                    {
                        InitializeComponent();
                    }
                    
            public void DoWork()
                    {
                        MyInvoke mi 
            = new MyInvoke(UpdateForm);
                        
            this.BeginInvoke(mi, new Object[] {"我是文本框","haha"});
                    }
                    
            public void UpdateForm(string param1,string parm2)
                    {
                        
            this.textBox1.Text = param1+parm2;
                    }
                    
            private void button1_Click(object sender, EventArgs e)
                    {
                        Thread thread 
            = new Thread(new ThreadStart(DoWork));
                        thread.Start();
                    }
                }
            }


            相關(guān)資料:Invoke 和 BeginInvoke 的真正涵義 、在多線程中如何調(diào)用Winform
            Control.BeginInvoke 方法  Visual Studio 2010Visual Studio 
            2010 
            在創(chuàng)建控件的基礎(chǔ)句柄所在線程上異步執(zhí)行委托。
            公共方法 BeginInvoke(Delegate) 在創(chuàng)建控件的基礎(chǔ)句柄所在線程上異步執(zhí)行指定委托。 
            公共方法 BeginInvoke(Delegate,Object[])  在創(chuàng)建控件的基礎(chǔ)句柄所在線程上,用指定的參數(shù)異步執(zhí)行指定委托。 
            public Object EndInvoke(IAsyncResult asyncResult)
            參數(shù):asyncResult 類型:System.IAsyncResult 
            IAsyncResult,表示特定的調(diào)用異步操作,在調(diào)用 BeginInvoke 時(shí)返回。 

             

            posted on 2016-09-08 10:16 天下 閱讀(1048) 評(píng)論(0)  編輯 收藏 引用 所屬分類: C#

            <2013年3月>
            242526272812
            3456789
            10111213141516
            17181920212223
            24252627282930
            31123456

            導(dǎo)航

            統(tǒng)計(jì)

            常用鏈接

            留言簿(4)

            隨筆分類(378)

            隨筆檔案(329)

            鏈接

            最新隨筆

            搜索

            最新評(píng)論

            精品视频久久久久| 97久久精品无码一区二区天美| 无码久久精品国产亚洲Av影片 | 国产精品久久久天天影视香蕉| 88久久精品无码一区二区毛片| 久久久久亚洲AV无码专区桃色| 国产精品一区二区久久精品涩爱 | 亚洲国产成人精品女人久久久 | 久久99精品久久久久久秒播| 亚洲精品无码久久久久AV麻豆| 午夜精品久久久久久中宇| 久久综合狠狠综合久久激情 | 久久久久久久久久久精品尤物| 精品久久久久久中文字幕人妻最新 | 久久免费视频6| 国产V亚洲V天堂无码久久久| 亚洲国产成人精品无码久久久久久综合| 婷婷综合久久中文字幕蜜桃三电影| 久久精品成人国产午夜| 亚洲精品无码久久久久sm| 久久久久99精品成人片牛牛影视| 熟妇人妻久久中文字幕| 亚洲国产成人久久精品99| 精品水蜜桃久久久久久久| 69久久夜色精品国产69 | 中文字幕成人精品久久不卡| 无遮挡粉嫩小泬久久久久久久| 久久综合久久性久99毛片| 国产亚洲精久久久久久无码AV| 2022年国产精品久久久久| 婷婷五月深深久久精品| 亚洲午夜久久久久妓女影院| 久久婷婷午色综合夜啪| 精品久久久久中文字幕一区| 99精品久久久久久久婷婷| 99久久国产主播综合精品| 亚洲午夜久久久精品影院| 国产精品伦理久久久久久| 国产午夜精品久久久久九九| 亚洲成人精品久久| 天堂无码久久综合东京热|