1. 程式人生 > >一種WPF在後臺線程更新UI界面的簡便方法

一種WPF在後臺線程更新UI界面的簡便方法

bool static syn current strong 表示 pos 更新ui界面 幸好

WPF框架規定只有UI線程(主線程)可以更新界面,所有其他後臺線程無法直接更新界面。幸好,WPF提供的SynchronizationContext類以及C#的Lambda表達式提供了一種方便的解決方法。以下是代碼:

public static SynchronizationContext s_SC = Synchronization.Current; //主窗口類的靜態成員 在App類中: static Thread s_MainThread = Thread.CurrentThread; //這個變量保存主線程(UI線程),為下面的屬性服務 //這個屬性表示當前執行線程是否在主線程中運行 public static bool IsRunInMainThread { get { return Thread.CurrentThread == s_MainThread;}} //這個函數用於設置UI界面上的某個元素 public void SetText(string strText) {   if (!App.IsRunInMainThread)   {     s_SC.Post(oo => { SetText(strText); }, null); //可以使用Post也可以使用Send     return;   }   textBlock1.Text = strText; } //這個函數用於從UI界面的元素獲取內容 public string GetText() {   if (!App.IsRunInMainThread)   {     string str = null;     s_SC.Send(oo => { str = GetText(); }, null); //必須要使用Send
    return str;   }   return textBlock1.Text; } 無論在主線程還是後臺線程調用GetText和SetText函數都沒有問題。

一種WPF在後臺線程更新UI界面的簡便方法