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