使用回調(diào)和線程處理一個(gè)耗時(shí)響應(yīng)過(guò)程
現(xiàn)在程序中有許多涉及長(zhǎng)耗時(shí)響應(yīng)過(guò)程的處理,比如訪問(wèn)WebService,遠(yuǎn)程調(diào)用,復(fù)雜處理等,如果我們使用直接順序執(zhí)行的方式進(jìn)行處理有可能導(dǎo)致界面停頓,響應(yīng)停止,無(wú)謂等待等缺陷,這是不應(yīng)該的。
一個(gè)耗時(shí)響應(yīng)過(guò)程應(yīng)該采用回調(diào)和線程來(lái)處理,具體就是把原來(lái)的順序執(zhí)行修改為異步方式,并讓被調(diào)用者調(diào)用調(diào)用者以獲得執(zhí)行結(jié)果。在附件的例子中,Viewer就是調(diào)用者,它代表界面,而LongTimeResponse是被調(diào)用者,它內(nèi)部用線程啟動(dòng)一個(gè)耗時(shí)過(guò)程,執(zhí)行完畢再通知調(diào)用者。
Viewer類代碼如下:



















LongTimeResponse類代碼如下,可以看出,它之所以能回調(diào)調(diào)用者,是因?yàn)槠鋬?nèi)部有調(diào)用者的引用viewer,在其構(gòu)造函數(shù)中viewer被賦上了值:





























調(diào)用過(guò)程如下:



執(zhí)行起來(lái)可以看出,程序先輸出了
New Count=123
過(guò)了十秒,才輸出:
New Count=1000
這說(shuō)明,程序是異步執(zhí)行的,耗時(shí)過(guò)程沒(méi)有影響到主干程序的運(yùn)行,而耗時(shí)過(guò)程完成后,才把返回結(jié)果通知了調(diào)用者,主干程序沒(méi)有受到耗時(shí)過(guò)程的影響,因此也就不會(huì)導(dǎo)致界面停頓,響應(yīng)停止,無(wú)謂等待等缺陷。
以上就是使用回調(diào)和線程處理一個(gè)耗時(shí)響應(yīng)的整個(gè)過(guò)程。
這里可下載整個(gè)程序:
http://www.aygfsteel.com/Files/sitinspring/Callback20070628133516.zip
例程2:
http://www.aygfsteel.com/Files/sitinspring/MVCThreadCallback.rar
posted on 2007-06-28 13:49 sitinspring 閱讀(2682) 評(píng)論(6) 編輯 收藏 所屬分類: 線程Thread