最近在編寫一個程序,主要實現(xiàn)了從多個Ftp站點自動下載數(shù)據(jù),程序結(jié)構(gòu)如下:Private void btnStartClicked(){ For() { //代碼多,不一一表示了,主要是對每個站進行遍歷,實現(xiàn)每個站數(shù)據(jù)的下載 //其中調(diào)用了下面這個函數(shù),這個函數(shù)實現(xiàn)單個站的數(shù)據(jù)下載。 downSingleSite(string [] siteInfo);}} Private void downSingleSite(string [] siteInfo){/*這個函數(shù)先根據(jù)提供的站點控制信息訪問網(wǎng)絡(luò),獲取下載文件的信息,并按條件進行篩選,獲取需要下載的文件信息并存入fileInfoList中。Foreach(string singleFile in fileInfoList){ 啟動一個線程執(zhí)行數(shù)據(jù)下載功能;}//如果有10個文件需要下載,那么就啟動了10個線程進行下載。 While() //用于對這幾個線程執(zhí)行是否完成進行判斷. { 如果沒完成Thread.sleep(3000);}}在以上程序中,我的程序能正常下載數(shù)據(jù),但是由于在窗口服務(wù)線程中執(zhí)行了這一數(shù)據(jù)下載過程,在這一服務(wù)未完成之前,其他窗口消息無法得到響應(yīng)因此,當(dāng)單擊窗口界面是,出現(xiàn)程序無響應(yīng)的顯示,,而我在程序中使用了sleep()是程序睡眠,但仍然沒有效果,不知是何原因。請各位高手不吝賜教,我該如何改變我的程序結(jié)構(gòu),請稍微詳細(xì)一點,我剛?cè)腴T,知識還比較欠缺。
2 回答

當(dāng)年話下
TA貢獻1890條經(jīng)驗 獲得超9個贊
判斷是否完成的While循環(huán)是在窗體的主線程中運行的,窗口當(dāng)然會失去響應(yīng)了??梢栽賳右粋€線程執(zhí)行判斷。或用用 BackgroundWorker 控件
- 2 回答
- 0 關(guān)注
- 430 瀏覽
添加回答
舉報
0/150
提交
取消