• <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
            在多線程編程中,我們經常要在工作線程中去更新界面顯示,而在多線程中直接調用界面控件的方法是錯誤的做法,Invoke 和 BeginInvoke 就是為了解決這個問題而出現的,使你在多線程中安全的更新界面顯示。
            正確的做法是將工作線程中涉及更新界面的代碼封裝為一個方法,通過 Invoke 或者 BeginInvoke 去調用,兩者的區別就是一個導致工作線程等待,而另外一個則不會。
            再舉個簡單例子說明下使用方法,比如你在啟動一個線程,在線程的方法中想更新窗體中的一個TextBox.. 

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

                
            this.TextBox1.Text="我是一個文本框"

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


            正確的做法是用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();
                    }
                }
            }


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

             

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

            <2010年12月>
            2829301234
            567891011
            12131415161718
            19202122232425
            2627282930311
            2345678

            導航

            統計

            常用鏈接

            留言簿(4)

            隨筆分類(378)

            隨筆檔案(329)

            鏈接

            最新隨筆

            搜索

            最新評論

            久久青青草原国产精品免费 | 国产99久久久国产精品小说| 久久久久99精品成人片牛牛影视| 久久一区二区三区免费| 久久亚洲国产成人影院| 久久国产精品无码一区二区三区| 久久被窝电影亚洲爽爽爽| 午夜福利91久久福利| 精品久久久久久亚洲精品 | 一个色综合久久| 久久大香香蕉国产| 欧美日韩中文字幕久久久不卡 | 久久久久人妻一区二区三区 | 日日躁夜夜躁狠狠久久AV| 99久久免费国产精精品| 亚洲日韩欧美一区久久久久我| 亚洲精品乱码久久久久久按摩| 一本久久久久久久| 97久久久久人妻精品专区| 无码精品久久久久久人妻中字| 久久中文精品无码中文字幕| aaa级精品久久久国产片| 色婷婷综合久久久久中文| 人妻无码精品久久亚瑟影视| 欧美久久亚洲精品| 欧美久久一区二区三区| 精品乱码久久久久久夜夜嗨| 国产精品久久久久久久久免费| 婷婷综合久久中文字幕蜜桃三电影| 久久99精品久久久久久水蜜桃| 色婷婷综合久久久久中文一区二区 | 亚洲va久久久噜噜噜久久狠狠| 精品久久久久久久国产潘金莲| 久久人妻少妇嫩草AV无码蜜桃| 久久亚洲欧美日本精品| 久久久精品免费国产四虎| 久久精品成人免费看| 97久久精品人人澡人人爽 | 亚洲午夜久久久久久噜噜噜| 尹人香蕉久久99天天拍| 免费精品久久天干天干|