新聞中心
首先在Visual Studio2010新建了一個WinForm項目WinFormApp1,里面會默認有個叫Form1的窗口。假設(shè),項目WinFormApp1的功能是為了查詢遠端Ftp服務(wù)器的文檔目錄,然后把查到的結(jié)果顯示到Form1的界面上。通常的做法是在Form1.cs類中添加一個QueryFtpFiles()方法用于對遠端的ftp服務(wù)器進行讀操作,然后把讀到的內(nèi)容顯示到界面上就算完成了。

在這個項目完成后,一般會先在本地或局域網(wǎng)內(nèi)的某個Ftp服務(wù)器上先做個測試,這時你會發(fā)現(xiàn)程序很***地運行著。當(dāng)你興致沖沖地把代碼交給你領(lǐng)導(dǎo)的時候,你的上司拿了遠在美國的ftp服務(wù)器來試運行,點擊“查詢”按鈕執(zhí)行QueryFtpFiles()查詢操作的時候,悲劇發(fā)生了——頁面死掉了(沒有響應(yīng))。。。你是不是覺得很沒面子?有木有?
這里有個問題,就是在執(zhí)行QueryFtpFiles()方法時,由于是對遠端的ftp服務(wù)器進行讀操作,本身IO操作就比較耗時,再考慮到網(wǎng)絡(luò)延遲等因素,你的界面就不得不停下了等待讀操作的完成。如果在這個讀操作完成前,你急不可耐地點了下界面,就出現(xiàn)了“沒有響應(yīng)”的后果。
其實,我在運行這個項目的時候,實際上是在運行由這個項目自動在Debug或Release目錄下生成的WinFormApp1.exe應(yīng)用程序,而WinFormApp1.exe對于我的Windows Server2003即操作系統(tǒng)來說,他就是一個進程。
操作系統(tǒng)書中講,傳統(tǒng)的進程有兩個基本屬性:擁有資源的獨立單位和可獨立調(diào)度和分配的基本單位。由于在進程的創(chuàng)建、撤銷和切換中,系統(tǒng)必須耗費較大的時空開銷。引入線程后,傳統(tǒng)的進程的兩個基本屬性分開,線程作為調(diào)度和分配的基本單位,進程作為獨立分配資源的單位。也就是說,在完成一個復(fù)雜的功能時,可以在一個進程中建立多個線程,每個線程分別完成某一項簡單功能,進程通過調(diào)度和排列組合這些線程來實現(xiàn)這個復(fù)雜的功能。
線程,其實就是一段代碼,一個方法或一連串方法,這段代碼或方法可以去完成某個功能,也可以什么都不用做,比如上面提到的QueryFtpFiles(),它其實就滿足作為線程的基本條件。
再回到原來的“沒有響應(yīng)”的問題上,在執(zhí)行WinFormApp1.exe這個進程的時候,這個進程會調(diào)用UI線程,其實也就是Form1.cs內(nèi)的代碼以及它調(diào)用的其他類的代碼,因為QueryFtpFiles()也在Form1.cs這個類中,所以它也算是UI線程的一部分。WinFormApp1.exe進程執(zhí)行時會首先調(diào)用這個UI線程(若沒有定義其他線程,這時UI線程應(yīng)該也是這個進程的唯一線程),這個UI線程在執(zhí)行QueryFtpFile()方法的過程中由于耗時很多以至于這個進程其他什么什么操作都要停下來等待,包括你去點擊界面的操作。
問題的描述應(yīng)該就是這樣了,至于解決方法,可以在UI線程中再定義另外一個線程thread1用來執(zhí)行QueryFtpFile()方法就可以了。
原文鏈接:http://www.cnblogs.com/computer-lzy/archive/2011/07/19/2111002.html
【編輯推薦】
- 新手軟件項目經(jīng)理該如何入門
- 項目經(jīng)理的力量應(yīng)該從哪里來?
- 當(dāng)你從程序員變?yōu)轫椖拷?jīng)理
- 軟件測試項目為什么會失敗
- 項目管理之CVS與SVN日常使用總結(jié)
文章名稱:簡述進程、線程與項目的關(guān)系
URL地址:http://fisionsoft.com.cn/article/cdjgppo.html


咨詢
建站咨詢
