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

在.NET多線程程序中使用異步調用的簡易方法

原創
開發 后端
本文將向讀者詳細介紹一種使用異步調用的簡單方法,希望對大家開發.NET多線程程序有所幫助。

【51CTO獨家特稿】簡介

對于開發者來說,運行異步任務簡直就是一場惡夢,特別是初學者更是如此。在本文附帶的代碼中,您將發現一個簡單的AsyncWorker類,它能夠使您輕松完成異步任務的處理,即使您對異步調用沒有全面深入的了解。當然,我們也很希望看到您貢獻的代碼,尤其是對于ReportProgress函數,因為它還未經測試。 

背景知識 

我為什么編寫這個助手類(helper class)呢? 簡單地說,這是因為我不喜歡.NET BackgroundWorker類,以及所有與IsBusy參數有關的問題。有時候,即使您成功地終止了異步任務,IsBusy也不會從true變為false。類backgroundWorker會強迫您在while循環中使用Application.DoEvents。也許還有其它正確使用它的方法,但是我至今還沒找到。我嘗試按照backgroundWorker的設計方法建立一個盡可能簡單的替換物。  

代碼用法  

如果您看過BackgroundWorker的文檔,那么使用下面的代碼也應該不成問題。為了初始化AsyncWorker,我們做如下定義:

AsyncCallback m_asyncWorker;  

然后,在您的代碼(構造函數)中對其進行初始化,如下所示:

  1. //通過設置maximumCount,我們可以對簡單的ThreadPool進行摹擬。  
  2. //參數maximumCount用于指出可以同時啟動多少個并行的線程。如果abortIfBusyParameter被設為true,那么其他線程就只能等待,或者被拒絕。  
  3. this.m_asyncWorker = new AsyncWorker(1);  
  4.  
  5. //分配一個后臺任務  
  6. this.m_asyncWorker.DoWork += new DoWorkEventHandler(m_asyncWorker_DoWork); 

您的后臺任務可以是任何您喜歡的東西: 

  1. void m_asyncWorker_DoWork(object sender, DoWorkEventArgs e) {  
  2.            Console.WriteLine("Hello world! I was started asynchronously.");  
  3.         }   

最后調用background worker :

  1. //因為abortIfBusyParameter 被設置為true,所以如果前面的調用仍然在運行的話,RunWorkerAsync將返回false(中止調用)。   
  2. if (!this.m_asyncWorker.RunWorkerAsync(true)) {  
  3.  Console.WriteLine("Worker in use....");  

通過把RunWorkerAsync參數abortIfBusy設置為true,即使前面的異步調用仍在運行,您也可以跳過這個事件。通過將其設為false,它會進入一個等待隊列,并在IsBusy從true轉換為false的時候馬上觸發。 這個機制對于性能敏感的應用程序來說非常有用。如果您有許多啟動異步調用的“低優先級”事件,并且如果前面的異步調用仍在運行(IsBusy),那么您可以決定是否應該啟動另一個異步調用。   

例如:如果您在屏幕上拖動一個對象的時候,那么就無需每次都重繪它。只有當IsBusy為false的時候才需對其進行繪制。 如果您想要獲得平滑效果,只需增加maximumCount(您的線程池)即可。

最后,如果您需要一個回調函數,那么您可以自己預訂RunWorkerCompleted事件。

  1. //分配RunWorkerCompleted。它是您的回調函數事件。  
  2. this.m_asyncWorker.RunWorkerCompleted += new RunWorkerCompletedEventHandler(m_asyncWorker_RunWorkerCompleted); 

結束語 

希望這個工具可以使您的生活變得更加輕松。請不要詢問JustDoSomething類的鎖定問題,因為它是其它測試的一部分。

【編輯推薦】

  1. .NET上執行多線程應該注意的兩點
  2. C#多線程控制進度條之多線程安全
  3. 通過多線程為基于.NET的應用程序實現響應迅速
  4. .NET 4.0中任務與線程關系談
  5. 詳解.NET編程過程中的線程沖突
責任編輯:彭凡 來源: 51CTO
相關推薦

2011-08-31 16:30:19

Lua多線程

2009-11-09 10:50:30

WCF異步調用

2024-01-07 17:29:10

編程語言線程Rust

2010-01-11 17:24:19

VB.NET異步調用

2009-11-06 15:54:15

WCF異步調用

2009-08-17 16:49:46

C#多線程控制

2009-12-07 14:26:47

WCF異步調用

2009-10-20 16:48:30

C#委托

2024-08-12 10:13:01

2010-02-25 09:13:34

WCF異步調用

2018-06-21 14:46:03

Spring Boot異步調用

2009-12-21 14:10:26

WCF異步調用

2021-03-22 08:45:30

異步編程Java

2021-03-29 09:26:44

SpringBoot異步調用@Async

2009-07-01 14:37:14

JavaScript異

2009-07-01 14:23:46

JavaScript異

2010-04-14 09:20:26

.NET多線程

2009-07-01 14:31:01

JavaScript異

2024-03-06 08:40:16

ReactJavascriptUI交互

2024-07-31 15:57:41

點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 欧美日日 | 国产精品99久久久久久久vr | 久久天天躁狠狠躁夜夜躁2014 | 日韩伦理电影免费在线观看 | 成人亚洲精品久久久久软件 | 日本aaaa| 午夜精品一区二区三区在线视频 | 成年人免费看 | 亚洲精品九九 | 国内激情av片 | 水蜜桃久久夜色精品一区 | www精品 | 怡红院成人在线视频 | 成人免费观看男女羞羞视频 | 成年免费大片黄在线观看一级 | 免费一级淫片aaa片毛片a级 | 天天干狠狠操 | 一级特黄视频 | 亚洲一区在线日韩在线深爱 | 国产日韩欧美激情 | 日本黄色大片免费 | 日韩欧美综合在线视频 | 日韩免费在线 | 在线亚州| 91麻豆产精品久久久久久 | 国产午夜精品一区二区三区四区 | 中文字幕av色 | 日本一区二区不卡 | 亚洲精品一区二区三区丝袜 | www.日本三级 | 国产一区三区在线 | 欧美精品在线播放 | 色噜噜亚洲男人的天堂 | 亚洲热在线视频 | 久久精品久久综合 | 亚洲一区二区在线播放 | 亚洲国产视频一区二区 | 成人免费av在线 | 精品亚洲一区二区三区四区五区 | 91麻豆精品国产91久久久久久 | 久久99精品久久久久久 |