技術(shù)報(bào)告多線程在WinForm窗體開(kāi)發(fā)中的應(yīng)用_第1頁(yè)
技術(shù)報(bào)告多線程在WinForm窗體開(kāi)發(fā)中的應(yīng)用_第2頁(yè)
技術(shù)報(bào)告多線程在WinForm窗體開(kāi)發(fā)中的應(yīng)用_第3頁(yè)
技術(shù)報(bào)告多線程在WinForm窗體開(kāi)發(fā)中的應(yīng)用_第4頁(yè)
技術(shù)報(bào)告多線程在WinForm窗體開(kāi)發(fā)中的應(yīng)用_第5頁(yè)
已閱讀5頁(yè),還剩5頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、計(jì)劃類別 項(xiàng)目編號(hào) 項(xiàng)目技術(shù)報(bào)告課題名稱 項(xiàng)目主持人 承擔(dān)單位 題目:多線程在WinForm窗體開(kāi)發(fā)中的應(yīng)用研究通常我們使用異步完成許多計(jì)算型的耗時(shí)操作,取得應(yīng)用程序運(yùn)行所需要的部分?jǐn)?shù)據(jù),再將它們綁定在UI中呈現(xiàn),這個(gè)過(guò)程由于數(shù)據(jù)量偏大,窗體會(huì)出現(xiàn)“失去響應(yīng)”的情況,而線程技術(shù)的使用可以方便的實(shí)現(xiàn)并發(fā)執(zhí)行,提升資源的利用率,提高程序處理效率,解除“假死”這種糟糕的體驗(yàn)。本文通過(guò)對(duì)C#多線程技術(shù)及委托方法的介紹,分析研究了在WinForm窗體開(kāi)發(fā)中解決假死狀態(tài)的兩種方法,給出實(shí)例及相關(guān)代碼,并對(duì)這兩種方法的特點(diǎn)進(jìn)行了總結(jié)。關(guān)鍵詞:多線程;假死;委托;BackGroundWorker控件Abstr

2、act:Asynchronous manners are usually adopted to implement lots of time-consuming computing operation,in order to achieve the data required by the application and bind them to be presented in UI.Due to the great amount of data,the form often stops responding.The multi-thread technology can facilitate

3、 the implementation of concurrency,promote the resource utilization,improve processing efficiency,and avoid the terrible experience of suspended animation.Based on the C# multi-thread technology and principal methods,the paper analyzes two solutions to the problems of suspended animation in the WinF

4、orm development,provides examples and related code,and summarizes the characteristics of two solutions.Keywords:multi-threading;suspended animation;commission;BackGroundWorker widget1 引言(Introduction)通常我們使用異步完成許多計(jì)算型、IO型的復(fù)雜、耗時(shí)操作,去取得我們的應(yīng)用程序運(yùn)行所需要的一部分?jǐn)?shù)據(jù)1。在取得這些數(shù)據(jù)后,我們需要將它們綁定在UI中呈現(xiàn)。當(dāng)數(shù)據(jù)量偏大時(shí),我們會(huì)發(fā)現(xiàn)窗體變成了空白面板。此

5、時(shí)如果用鼠標(biāo)點(diǎn)擊,窗體標(biāo)題將會(huì)出現(xiàn)“失去響應(yīng)”的字樣,而實(shí)際上UI線程仍在工作著,這對(duì)用戶來(lái)說(shuō)是一種極度糟糕的體驗(yàn)。我們打個(gè)比方:比如在上傳圖片的時(shí)候,我們會(huì)對(duì)上傳成功的圖片再進(jìn)行一些相關(guān)的處理,一般保存原圖,再生成一張小圖給一些應(yīng)用做預(yù)覽圖。如果讀取原圖再處理的過(guò)程由應(yīng)用程序?qū)崿F(xiàn),讀取原圖需要時(shí)間為1秒,處理圖片需要2秒,現(xiàn)在有5張大圖,所需要花費(fèi)的時(shí)間就是(1+2)*5=15秒,根據(jù)圖片的不同,那么單位時(shí)間會(huì)更多,總計(jì)時(shí)間就會(huì)更久,如果有一百萬(wàn)張圖要進(jìn)行相同的處理,那么我們等待的時(shí)間將會(huì)是15*1000000秒,大約是174天,這種等待是不是有點(diǎn)兒無(wú)法忍受。那么,我們是不是可以把程序設(shè)計(jì)更

6、好一點(diǎn)兒,讓?xiě)?yīng)用程序在讀取文件的時(shí)候同時(shí)處理上一個(gè)已讀入的文件,這樣就好像是同時(shí)在做兩件事情,一邊燒開(kāi)水,一邊打毛衣,可以盡可能的縮短時(shí)間。多線程的引入可以幫助應(yīng)用程序?qū)崿F(xiàn)這種更理想的狀態(tài),減少客戶端的響應(yīng),同時(shí)也提升了CPU的使用率。2 線程(Threads)在CPU制造工藝已經(jīng)達(dá)到了物理極限的今天,除非技術(shù)有質(zhì)的突破來(lái)進(jìn)一步提高處理器的速度,但是,我們所要處理的數(shù)據(jù)量卻沒(méi)有一刻停止它飛速增長(zhǎng)的腳步,所以,并行處理技術(shù)將成為未來(lái)發(fā)現(xiàn)的趨勢(shì),并行處理技術(shù)的核心是對(duì)線程的操作2。線程,作為輕量級(jí)進(jìn)程(Lightweight Process,LWP),是程序執(zhí)行流的最小單元,多線程是指從軟件或者硬

7、件上實(shí)現(xiàn)多個(gè)線程并發(fā)執(zhí)行的技術(shù)。其實(shí),在開(kāi)發(fā)的應(yīng)用軟件中,大多數(shù)線程的數(shù)量都不止一個(gè),多個(gè)線程可以并發(fā)的執(zhí)行,共享進(jìn)程的全局變量和堆的數(shù)據(jù)。它的優(yōu)勢(shì)在于,當(dāng)某個(gè)操作陷入長(zhǎng)時(shí)間的等待,或者,一些計(jì)算可能會(huì)消耗大量的時(shí)間,這時(shí)會(huì)出現(xiàn)和用戶之間的交互中斷,如果采用多線程,一個(gè)線程等待(負(fù)責(zé)計(jì)算)的時(shí)候,其他線程可以執(zhí)行(另一個(gè)線程負(fù)責(zé)交互),保證CUP的利用率3。下面我們來(lái)具體看看,多線程在WinForm窗體開(kāi)發(fā)中是如何解除假死的。3 解決假死的方法(The method to solve the dead)什么是假死呢?凡是WinForm的應(yīng)用程序,如果程序執(zhí)行的是一個(gè)非常冗長(zhǎng)的處理操作(比如文件

8、查詢、批量的計(jì)算、大量文件的上傳或下載等),程序在執(zhí)行的時(shí)候,用戶界面會(huì)被鎖定,雖然主活動(dòng)窗口一直在運(yùn)行,但用戶沒(méi)有辦法與程序進(jìn)行交互,窗體的位置和大小也不能移動(dòng)和改變,就好像“死”在那里不能動(dòng)一樣,用戶不能產(chǎn)生良好的使用體驗(yàn)4。如何做才能使得這個(gè)程序有響應(yīng),消除這種“假死”的狀態(tài)呢?答案就是在后臺(tái)線程中執(zhí)行這個(gè)操作?,F(xiàn)在介紹兩種方法來(lái)消除這種“假死”的現(xiàn)象。一種是利用BackgroundWorker控件實(shí)現(xiàn);另一種是采用線程加委托的方法消除“假死”。下面我們分別來(lái)進(jìn)行介紹。3.1 利用BackGroundWorker 控件解除假死使用BackgroundWorker控件可以在后臺(tái)單獨(dú)的線程上

9、執(zhí)行操作,通常用于數(shù)據(jù)庫(kù)操作、文件下載等相對(duì)耗時(shí)一般要求后臺(tái)處理的任務(wù),使用起來(lái)比較簡(jiǎn)單5?,F(xiàn)在我們用BackGroundWorker控件設(shè)計(jì)一個(gè)模擬1000個(gè)文件復(fù)制過(guò)程的進(jìn)度條,當(dāng)我們點(diǎn)擊“文件復(fù)制模擬”按鈕時(shí),進(jìn)度條會(huì)顯示“正在復(fù)制”字樣,以及完成復(fù)制的百分比,如圖1所示,這樣做的好處是:用戶可以隨時(shí)了解應(yīng)用程序執(zhí)行的進(jìn)度,而不至于陷入盲目焦躁的等待。 3.2 采用線程加委托的方法解決假死前面我們說(shuō)過(guò),在winform開(kāi)發(fā)時(shí),如果要對(duì)某控件顯示的內(nèi)容進(jìn)行操作,而這些內(nèi)容的來(lái)源很耗時(shí),會(huì)阻塞UI主線程,造成界面的假死,在操作完成之前,界面是不能接收任何響應(yīng)的。我們可以采用線程+異步委托的方

10、法來(lái)確保,即便是耗時(shí)的數(shù)據(jù)操作也不會(huì)影響UI的顯示和操作的流暢性6。現(xiàn)在想模擬一個(gè)圖片上傳的功能,當(dāng)點(diǎn)擊上傳按鈕時(shí),彈出“上傳文件進(jìn)度“對(duì)話框;當(dāng)上傳結(jié)束后,對(duì)話框自動(dòng)關(guān)閉。如圖2所示。當(dāng)文件上傳成功后,調(diào)用UI線程上的closeTip方法,關(guān)閉窗體2??缇€程直接訪問(wèn)控件在C#中是被禁止,還好我們有InvokeRequired,用它就可以解決這個(gè)問(wèn)題。當(dāng)一個(gè)控件的InvokeRequired屬性值為真時(shí),說(shuō)明有一個(gè)創(chuàng)建它以外的線程想訪問(wèn)它。此時(shí)它將會(huì)在內(nèi)部調(diào)用new MethodInvoker(LoadGlobalImage)來(lái)完成下面的步驟,這個(gè)做法保證了控件的安全7。舉個(gè)例子更如易理解,假

11、如有人想找你借錢(qián),他可以直接在你的錢(qián)包中拿嗎?這樣是不是太不安全了?所以,必須讓別人先要告訴你,你再?gòu)淖约旱腻X(qián)包把錢(qián)拿出來(lái)借給別人,這樣更安全,也更合乎邏輯。4 結(jié)論(Conclusion)本文通過(guò)對(duì)C#多線程技術(shù)及委托方法的介紹,分析了在WinForm窗體開(kāi)發(fā)中出現(xiàn)假死狀態(tài)的原因,并且詳細(xì)的說(shuō)明了如何使用BackGroundWorker控件解除假死,以及如何采用線程加異步委托的方法解決假死。當(dāng)然,在實(shí)際的開(kāi)發(fā)過(guò)程中解除假死的方法還有很多,比如我們也可以利用Application.DoEvents()來(lái)解決這個(gè)問(wèn)題8。當(dāng)然,多線程并非是程序員的圣杯,使用起來(lái)也并非一勞永逸,它的使用會(huì)增加的內(nèi)存

12、負(fù)擔(dān)、要求CUP有更強(qiáng)的處理能力、“死鎖”也是不可回避的、如果不使用合理的同步結(jié)構(gòu),以保證獨(dú)占的數(shù)據(jù)訪問(wèn)方式,那么,數(shù)據(jù)損壞也是多線程處理所要面對(duì)的一個(gè)巨大問(wèn)題等等。對(duì)于以上問(wèn)題,我們可以對(duì)此進(jìn)行更深入的研究9。隨著制造水平的提高和技術(shù)的發(fā)展,CPU已經(jīng)進(jìn)入了超線程、多核的時(shí)代,相信在不久的未來(lái),我們一定可以用更優(yōu)化的方式,設(shè)計(jì)出更加實(shí)用的、高效的應(yīng)用程序,帶給用戶全新的操作體驗(yàn)。參考文獻(xiàn)(References)1 CAI Yunfei,TANG Zhenmin,ZHAO Chunxia.New Layered SOA-Based Architecture for Multi-Robots C

13、ooperative Online SLAMJ.Chinese Journal of Electronics,2014, 01:25-30.2 Chen.S.M.,J.M.Tan.Handling Multicriteria Fuzzy Decision-Making Problems Based on VagueSet-TheoryJ.Fuzzy SetsandSystems,1994,67(2):163-172.3 Colvin,J.,Tobler,N.,Anderson,J.A.Productivity and Multiscreen Computer DisplaysJ.Rocky Mountain Communication Review,2007,2(01):31-53.4 龐麗萍.操作系統(tǒng)原理(第四版)M.北京:華中科技大學(xué)出版社,2015.5 (美)斯托林斯.陳向群,譯.操作系統(tǒng):精髓與設(shè)計(jì)原理(原書(shū)

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論