天天看點

C#學習之五---WPF-UI線程

寫這篇記錄是因為在今天逛部落格,搜尋關于C#的資料,看到很多大神的神作,慚愧哦,自己寫的都是寫學習步驟,沒啥技術含量,但是作為自己的學習筆記,我願意這麼寫下去...加油!!!

在 何戈洲前輩 的作品中有關于C#--WPF的作品,我今天看了一些,很有用,這是他的C# -WPF篇的網站:http://www.cnblogs.com/hegezhou_hot/category/260429.html

大家可以去他那裡學習,我隻記錄自己今天的學習:

我用我上次的  C#學習之二---建立簡單的圖形應用程式-WPF  來做實驗,在裡面加了一個Button,改名為UI;

如圖:

C#學習之五---WPF-UI線程

其代碼如下:

private void textUi_Click(object sender, RoutedEventArgs e)
        {
            Thread t = new Thread(delegate()
            {
                this.userName.Text = " 測試UI";

            });
            t.Start();
        }
           

運作會出現如下錯誤:

C#學習之五---WPF-UI線程

WPF中的UI控件,如果我們探究本質,他們都是從DispatcherObject繼承,是以都必須由UI線程進行排程和使用,如果我們在其他的背景線程中操作界面相關的元素時,就會出現如下的異常資訊:(這是複制過來的)

我們更改程式如下:

private void textUi_Click(object sender, RoutedEventArgs e)
        {
            Thread t = new Thread(delegate()
            {
                //this.userName.Text = " 測試UI";
                this.userName.Dispatcher.Invoke(new Action(delegate() { userName.Text = " 測試UI"; }));

            });
            t.Start();
        }
           

記得在開頭加上一句:

using System.Threading; 
           

如下是運作結果,我們先點選UI,然後點選OK,結果如圖:

C#學習之五---WPF-UI線程

我們需要知道,最終還是由UI線程進行執行即可,當我們在WPF中進行多線程程式設計時需要特别的注意。在後面的MVVM程式設計的過程中,我們隊ViewModel中的綁定源對象進行修改時,也需要注意這個問題。(這是複制過來的)

在此感謝 何戈洲前輩 ,今天到此為止.

OVER!!!

繼續閱讀