李繼武 黑龍江司法警官職業(yè)學(xué)院信息技術(shù)系,哈爾濱 150080
.NET平臺下異步調(diào)用機制在財務(wù)分析軟件中的應(yīng)用研究
李繼武 黑龍江司法警官職業(yè)學(xué)院信息技術(shù)系,哈爾濱 150080
本文首先論述了.NET平臺下異步調(diào)用機制的工作原理,然后探討了利用異步調(diào)用機制處理財務(wù)分析軟件中多線程下載研究報告的編程思路,并給出了重要部分的源代碼,上述異步調(diào)用機制的編程思路和源代碼對有關(guān)的工程實踐有較高的實用價值。
.NET;異步;調(diào)用;財務(wù);分析
.NET; Asynchronous; Calling; Financial; Analysis
本文研究的問題來源于黑龍江省高等教育學(xué)會“十一五”規(guī)劃課題“‘財務(wù)分析’課程輔助教學(xué)專家系統(tǒng)的研究”(下文簡稱“課題”)項目,擬解決上市公司研究報告遠程多線程下載問題。
在課題中,諸多上市公司的研究報告需要從互聯(lián)網(wǎng)上下載,考慮到數(shù)量多,下載量大,需要在軟件開發(fā)過程中想個高效的解決辦法,本文重點探討在.N ET平臺下利用異步調(diào)用機制多線程下載的編程思路,并給出重點部分的源碼解決方案。
眾多的研究報告如果一個一個的下載,效率較低,一個常規(guī)的解決方案是采用多線程編程,但是,多線程編程需要深入研究System.Th reading命名空間的細節(jié),換句話說,開發(fā)難度較大,實際上,.NET針對這種問題提供了一個較易實行的解決方案:異步調(diào)用機制。下面,我講解一下異步調(diào)用機制的工作過程。
1.1 定義一個委托
我們知道,C#編譯器在處理delegate關(guān)鍵字時,其動態(tài)生成的類中定義了兩個方法Begin Invoke()和End Invoke(),這兩個方法可以使該委托類型自動擁有在單獨的線程上調(diào)用方法的能力,不僅可以傳遞參數(shù),還可以獲得被調(diào)用方法的返回值,比如,定義如下一個委托:
p u b l i c d e l e g a t e v o i d Dow n loadReportHand ler(string url,string reportId);
其中,u r l表示要下載的研究報告所在的網(wǎng)絡(luò)位置,reportId表示研究報告ID,基于上述定義,C#編譯器將會生成如下方法原型:
public IAsyncResult Begin Invoke(string url,string reportId,AsyncCallback cb,object state);
pub lic in t End Invoke(IAsyncResu lt result);
在上述原型中,Begin Invoke()方法的返回值是IA syncResu lt類型,這個返回值傳遞給End Invoke()方法,即可獲得異步方法的調(diào)用結(jié)果,由此看來,IAsyncResu lt類型無非是Begin Invoke()方法和En d Invok e()方法的一個橋梁而已。AsyncCallback是一個委托類型,實際調(diào)用Begin Invoke()方法時,可以提供一個AsyncCallback委托的實例作為參數(shù),這樣,當異步調(diào)用方法完成時,AsyncCallback委托便會自動調(diào)用指定的方法。Begin Invoke()方法的最后一個參數(shù)s t a t e允許從主線程傳遞額外的信息給AsyncCallback委托指定的方法。
1.2 定義Dow nloadReportHand ler委托指定的方法
根據(jù)Dow nloadReportHand ler委托,定義如下實例方法:
上述方法中,W ebClien t類用于從互聯(lián)網(wǎng)下載資源。
1.3 定義AsyncCallback委托指定的的方法
我們可以在上述方法中編寫代碼處理異步調(diào)用方法完成后的事項。
1.4 編寫主線程工作代碼
有了前面編寫的代碼,我們就可以在主線程中編寫如下代碼:
將.NET平臺下的異步調(diào)用機制實際應(yīng)用到軟件開發(fā)中,取得了很好的應(yīng)用效果,下面的軟件運行界面就是一個實例如圖一。
在圖中,我們發(fā)現(xiàn),多個研究報告有的已經(jīng)下載完畢,有的正在下載,有的尚未下載,這種效果就是應(yīng)用異步調(diào)用機制取得的,它有效地縮短了研究報告的下載時間,使程序高效地運行。
綜上所述,我們會發(fā)現(xiàn),.NET平臺提供的異步調(diào)用機制語法簡潔,思路清晰,既獲得了多線程的好處,又避免了多線程編程的復(fù)雜性,對有關(guān)的工程實踐有較高的實用價值。
圖一
[1]Anders Hejlsberg, Mads Torgersen, Scott Wiltamuth, Peter Golde.C#程序設(shè)計語言.機械工業(yè)出版社.2 0 1 0
[2]Andrew Troelsen.C#與.NET3.5高級程序設(shè)計.人民郵電出版社.2 0 0 9
Research of The Application of .NET Platform Asynchronous Calling Mechanism In The Financial Analysis Softw are
LI Jiwu Heilongjiang Judicial Police Vocational College , Harbin 150080
This paper discusses the principles of .NET platform asynchronous calling mechanism first, and then discusses the programming ideas of multi-threaded downloads financial reports in the financial analysis software using asynchronous calling mechanism, and gives the source code of important parts, the above programming ideas of asynchronous calling mechanism and source code have a high practical value to engineering practice.
10.3969/j.issn.1001-8972.2011.10.130
李繼武(1 9 7 3-),男,黑龍江哈爾濱人,副教授,碩士,主要研究方向為網(wǎng)絡(luò)軟件開發(fā)及企業(yè)級應(yīng)用。