為Windows應用建立簡單的非同步呼叫模式

來源:互聯網
上載者:User

簡介

最近我編寫了很多智能用戶端應用,總結了一些能夠使應用程式在後台調用Web Service時不凍結前台介面的非同步呼叫方法。雖然當前.NET Framework本身已經提供了非同步調 用的機制,但我發現在Windows應用中這一機制比較難於把握,因為這時你需要正確的控制用 戶介面線程處理。

在這篇文章中,我將教給您一種在Windows應用程式中實現非同步調 用Web服務的簡單方法,通過這一方法,您不用再考慮後台線程與前台介面線程的互動關係了 。

服務代理

Visual Studio® .NET會產生較好的Web服務代理類,通過它可以 非同步使用Web服務,但是這個代理類實現的是.NET Framework本身的非同步呼叫機制,如上所 述,這一機制對於Windows應用來說並不十分方便。由於這個原因,我一般不直接使用產生的 代理類,而是在中間增加服務代理類。

服務代理類就是增加了額外功能的類,這些功 能可以協助用戶端程式與Web服務進行互動。服務代理類實現了許多有用的功能,包括資料緩 存,安全身份管理,離線操作支援等等。本文中建立的服務代理類比.NET Framework本身的 普通代理類實現了更簡便的非同步呼叫模式。

使用介面執行緒

應用程式從一個建立和 系統管理使用者介面的線程起始,這一線程被稱為使用介面執行緒。大多數開發人員本能的會使用使用者 介面線程完成所有的工作,包括進行Web服務調用,遠程對象調用,訪問資料庫等等,大多數 使用和效能方面的問題是由這一不恰當的方法引起的。

問題的本質是你永遠不可能精 確的預知訪問Web服務,遠程對象,或者資料庫所需的時間。而且當你在使用介面執行緒中進行 這類的調用時,使用者介面就有可能會產生令人惱怒的凍結。

自然而然的,你會把這一 類的調用放置在一個單獨的線程中,但我更進了一步,建議您把所有的非使用者介面工作坊制 在一個分離的線程中。我的觀點是,使用介面執行緒只用來系統管理使用者介面,而所有那些你不能 保證良好回應時間的對象調用都應該是非同步,無論是進程內的,跨進程的,還是跨電腦 的。

無論如何,盡量使使用介面執行緒處理的非同步呼叫模式簡單化,我已經實現了一個 與Visual Studio 2005裡某個屬性類別似的簡單非同步呼叫模式。作為開始,我們首先解釋一下 當前.NET Framework中非同步呼叫模式的工作原理。

.NET非同步呼叫模式

系統產生的 Web服務代理類的每個Web函數都有一個Begin和一個End方法,每個支援.NET Framework非同步 調用模式的對象都和這個類似。開始進行非同步呼叫時,用戶端調用Begin方法時就立即響應, 或者在建立了訪問Web服務的獨立線程後馬上響應。在這之後的某個時間,當Web服務訪問完 成後,用戶端再調用End方法。

但用戶端如何知道什麼時候調用End方法呢?Begin方 法會返回一個IAsyncResult對象,可以協助你跟蹤非同步呼叫的過程,也可以明確的等待後台 線程完成,但如果在使用介面執行緒中進行這些工作,會降低整個系統的同步性。更好的方法 是,在使用者介面進程中註冊一個回呼函數,當其它工作完成時產生一個自動通知。

讓 我們看一段範例代碼,在這段代碼中,我們從一個Web服務中擷取一些客戶資料,這些功能通 過Web服務代理類裡的GetCustomerData方法完成。我們可以啟動這個Web服務調用,並且用以 下代碼註冊一個回呼函數,用來在使用介面執行緒中產生與應用程式進行互動的功能。

private void SomeUIEvent( object sender, EventArgs e )
{
  // Create a callback delegate so we will
  // be notified when the call has completed.
  AsyncCallback callBack = new
   AsyncCallback( CustomerDataCallback );
  // Start retrieving the customer data.
  _proxy.BeginGetCustomerData( "Joe Bloggs", callBack, null );
}

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.