成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

WPF異步模式簡單應用方式介紹

開發(fā) 開發(fā)工具
WPF異步模式的創(chuàng)建對于初學者來說還是比較難理解的。在這里,我們可以通過一個簡單的實現案例來為大家介紹相關實現方法。

WPF異步模式是一個比較復雜的實現過程。不過我們在這篇文章中將會為大家介紹一下有關WPF異步模式簡單的實現方法,方便大家理解。#t#

以WeatherForecast為例. 需求: 用戶在窗體上點擊一個按鈕, 程序去網絡上查詢天氣情況, 并把結果顯示在窗體上. 網絡查詢是一個耗時任務, 在等待結果的同時, 用戶將看到一個旋轉的時鐘動畫表示程序正在查詢.

 

WPF異步模式為:

窗口類MainWindow中有耗時函數: string FetchWeatherFromInternet().

窗口類MainWindow中包含一個函數 UpdateUIWhenWeatherFetched(string result), 用于把任務結果顯示在界面上.

當用戶點擊按鈕時, 在 btnFetchWeather_Click() 中,

如果是同步調用, 代碼很簡單, 如下:

  1. string result = this.
    FetchWeatherFromInternet();  
  2. this.UpdateUserInterface( result ); 

現在需要異步執(zhí)行, 稍微麻煩點, 需要用到3個delegate, 其中一個代表要執(zhí)行的任務, 另一個代表任務結束后的callback, 還有一個代表交給UI執(zhí)行的任務, 上述WPF異步模式代碼被替換成如下:

 

  1. // 代表要執(zhí)行的異步任務  
  2. Func<string> asyncAction = 
    this.FetchWeatherFromInternet();  
  3. // 處理異步任務的結果  
  4. Action<IAsyncResult> resultHandler = 
    delegate( IAsyncResult asyncResult )  
  5. {  
  6. //獲得異步任務的返回值, 這段代碼必須
    在UI線程中執(zhí)行  
  7. string weather = asyncAction.
    EndInvoke( asyncResult );  
  8. this.UpdateUIWhenWeatherFetched
    ( weather );  
  9. };  
  10. //代表異步任務完成后的callback  
  11. AsyncCallback asyncActionCallback = 
    delegate( IAsyncResult asyncResult )  
  12. {  
  13. this.Dispatcher.BeginInvoke
    ( DispatcherPriority.Background, 
    resultHandler, asyncResult );  
  14. };  
  15. //這是才開始執(zhí)行異步任務  
  16. asyncAction.BeginInvoke
    ( asyncActionCallback, null );  
  17. private void ForecastButtonHandler
    (object sender, RoutedEventArgs e)  
  18. {  
  19. this.UpdateUIWhenStartFetching
    Weather();  
  20. //異步任務封裝在一個delegate中, 
    此delegate將運行在后臺線程   
  21. Func<string> asyncAction = this.
    FetchWeatherFromInternet;  
  22. //在UI線程中得到異步任務的返回值,
    并更新UI //必須在UI線程中執(zhí)行 Action
    <IAsyncResult> resultHandler = 
    delegate(IAsyncResult asyncResult) 
    { string 
    weather = asyncAction.EndInvoke
    (asyncResult); this.UpdateUIWhenWeather
    Fetched(weather); };  
  23. //異步任務執(zhí)行完畢后的callback, 此callback
    運行在后臺線程上. //此callback會異步調用
    resultHandler來處理異步任務的返回值.  
  24. AsyncCallback asyncActionCallback = 
    delegate(IAsyncResult asyncResult)  
  25. {  
  26. this.Dispatcher.BeginInvoke
    (DispatcherPriority.Background, 
    resultHandler, asyncResult);  
  27. };  
  28. //在UI線程中開始異步任務, //asyncAction
    (后臺線程), asyncActionCallback(后臺線程)
    和resultHandler(UI線程) //將被依次執(zhí)行  
  29. asyncAction.BeginInvoke(asyncAction
    Callback, null);  
  30. }  
  31. private string FetchWeatherFromInternet()  
  32. {  
  33. // Simulate the delay from network access.  
  34. Thread.Sleep(4000);  
  35. String weather = "rainy";  
  36. return weather;  
  37. }  
  38. private void UpdateUIWhenStartFetching
    Weather()  
  39. {  
  40. // Change the status this.fetchButton.
    IsEnabled
     = false;  
  41. this.weatherText.Text = "";  
  42. }  
  43. private void UpdateUIWhenWeatherFetched
    (string weather)  
  44. {  
  45. //Update UI text  
  46. this.fetchButton.IsEnabled = true;  
  47. this.weatherText.Text = weather;  

以上就是對WPF異步模式實現的簡單方法介紹。

責任編輯:曹凱 來源: 博客園
相關推薦

2009-12-25 09:34:50

WPF顯示HTML

2009-12-28 13:23:19

WPF導出圖片

2009-12-29 10:32:24

WPF Listbox

2009-12-23 18:06:25

WPF模板

2009-12-24 14:30:19

WPF MVVM

2009-06-23 13:01:04

JSF應用

2010-03-10 15:05:22

linux系統(tǒng)備份方式

2009-12-25 13:41:33

2009-07-29 15:15:31

ASP應用程序

2009-12-29 08:54:09

Ubuntu Linu

2009-12-23 10:29:01

WPF應用程序

2010-01-25 13:29:53

Android本地應用

2010-04-15 14:33:16

WiMAX無線應用模式

2009-12-11 13:48:44

PBR策略路由

2009-12-21 17:45:26

Fedora Core

2010-07-07 10:37:09

SAN多協(xié)議

2010-02-22 14:09:08

WCF Dispose

2009-12-28 10:47:58

WPF繪圖

2010-02-04 14:29:45

C++ typenam

2010-02-06 16:21:35

C++常規(guī)DLL
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 欧美一级片在线观看 | 69堂永久69tangcom| 欧美日韩精品久久久免费观看 | 免费网站在线 | 九九av| 国产三区视频在线观看 | 日本色高清 | 激情黄色在线观看 | 麻豆av网站 | 不卡一区二区三区四区 | 色在线免费视频 | 日韩一区在线播放 | 欧美一区二区三区在线 | 亚洲成人网在线播放 | 在线观看亚洲专区 | 九七午夜剧场福利写真 | 亚洲精品免费视频 | 91久久精品国产免费一区 | 一区二区三区欧美在线观看 | 欧美精品一| 亚洲人成人一区二区在线观看 | 美女午夜影院 | 国产精品美女久久久久久免费 | 欧美激情视频一区二区三区在线播放 | 亚洲国产成人精品女人久久久野战 | 波多野结衣一区二区三区 | 久久久视| xx视频在线观看 | 欧美日韩不卡合集视频 | 久久精品一区二区三区四区 | av在线免费观看网站 | 最新免费黄色网址 | 91精品国产91久久久久久不卞 | 久久不卡视频 | 亚洲免费视频一区 | 日韩久草 | 久久99精品久久久久久国产越南 | 欧美日韩在线电影 | 欧美a级成人淫片免费看 | 国产成人自拍av | 国产精品一区网站 |