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

慕尼黑的夜晚無繁華
TA貢獻1864條經驗 獲得超6個贊
判斷是否完成的While循環是在窗體的主線程中運行的,窗口當然會失去響應了??梢栽賳右粋€線程執行判斷?;蛴糜?BackgroundWorker 控件
- 1 回答
- 0 關注
- 366 瀏覽
添加回答
舉報
0/150
提交
取消