WPF (2)Thread執行緒樣例

2021-09-14 03:05:19 字數 3296 閱讀 8275

以下是把樣例轉換為簡要說明,同時給出實際執行效果及關鍵**:

呼叫自身執行緒迴圈查詢素數

在本示例中,模擬檢索天氣預報的遠端過程呼叫。 使用乙個單獨的輔助線程來執行此呼叫,並在完成後在 ui 執行緒的 dispatcher 中排程乙個更新方法。

private void forecastbuttonhandler(object sender, routedeventargs e)

當單擊按鈕時,顯示時鐘圖並開始顯示它的動畫效果。 禁用該按鈕, 在乙個新執行緒中呼叫 fetchweatherfromserver 方法,然後返回,這樣 dispatcher 就可以在我們等待收集天氣預報時處理事件。

private void fetchweatherfromserver()

為簡單起見,此示例中實際沒有任何網路**。 通過使新執行緒休眠四秒鐘來模擬網路訪問的延遲。 此時,原始的 ui 執行緒仍然正在執行並響應事件。為了對此進行說明,我們使乙個動畫保持執行,並使最小化和最大化按鈕也繼續工作。

當延遲結束,並且我們已隨機選擇了天氣預報時,是時候向 ui 執行緒返回報告了。為此,我們在 ui 執行緒中使用該執行緒的 dispatcher 安排乙個對 updateuserinte***ce 的呼叫。我們將乙個描述天氣的字串傳遞給安排的此方法呼叫。

private void updateuserinte***ce(string weather)

else if (weather == "rainy")

//stop clock animation

_showclockfacestoryboard.stop(this);

_hideclockfacestoryboard.begin(this);

//update ui text

fetchbutton.isenabled = true;

fetchbutton.content = "fetch forecast";

weathertext.text = weather;

}

當 ui 執行緒中的 dispatcher 有時間時,會對 updateuserinte***ce 執行預定呼叫。此方法停止時鐘動畫並選擇乙個影象來描述天氣。它顯示此影象並還原「fetch forecast」(獲取預報)按鈕。

以上。《microsoft .net framework 開發人員指南》介紹了元件向其客戶端公開非同步行為的一種模式(請參見 基於事件的非同步模式概述)。例如,假定我們希望將 fetchweatherfromserver 方法打包到乙個可重用的非圖形元件中。如果採用標準的 microsoft .net framework 模式,那麼**應與下面的內容類似。

public class weathercomponent : component

//get weather: asynchronous

public void getweatherasync()

public event getweathercompletedeventhandler getweathercompleted;

}public class getweathercompletedeventargs : asynccompletedeventargs

public string weather

}private string _weather;

}public delegate void getweathercompletedeventhandler(object sender,

getweathercompletedeventargs e);

getweatherasync 將使用前面介紹的一種技術(如建立後台執行緒)來非同步執行工作,同時不阻止呼叫執行緒。

此模式的最重要部分之一是最初在呼叫方法名稱 async 方法的執行緒上呼叫方法名稱 completed 方法。 通過儲存 currentdispatcher,您可以使用 wpf 輕鬆地實現這一點。但是,之後只能在 wpf應用程式中使用該非圖形元件,而不能在 windows forms或 asp.net 程式中使用該元件。

dispatchersynchronizationcontext 類可滿足這一需求。可以將該類視為還使用其他 ui 框架的 dispatcher 的簡化版本。

public class weathercomponent2 : component

private dispatchersynchronizationcontext requestingcontext = null;

public void getweatherasync()

private void raiseevent(getweathercompletedeventargs e)

private string fetchweatherfromserver()

private void doevent(object e)

public event getweathercompletedeventhandler getweathercompleted;

public delegate string noargdelegate();

}

此處在msdn或microsoft help檢視器中wpf執行緒處理模型提及。

執行緒學習2 Thread類

thread 類 使用thread類可以建立和控制線程,thread類有如下方法 start 啟動執行緒 sleep int 靜態方法,暫停當前執行緒指定的毫秒數 abort 通常使用該方法來終止乙個執行緒 suspend 該方法並不終止未完成的執行緒,它僅僅掛起執行緒,以後還可恢復 resume ...

多執行緒 執行緒池的使用樣例

技術難點 多執行緒的使用與出現的問題 1 執行緒池的建立 使用對 newfixedthreadpool進行建立執行緒池,可自選長度,後面的newlnamedthreadfactory,一是定義了執行緒的名稱.二是放入了無限佇列,不會出現丟資料的情況 protected static final ex...

WPF 多執行緒處理 2

wpf ui 設計需要自動適應窗體大小,那麼grid是非常好的布局控制項。首先看看這個控制項的布局 這個grid是3列5行的布局,grid裡面可以包含任何子元素,因此是所有布局的首選,還有一些其他的空間如dockpanel,canvas,stackpanel,warppanel也是非常好的布局控制項...