亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

新手請教,關于異步處理的程序

新手請教,關于異步處理的程序

狐的傳說 2018-10-10 01:02:28
最近在編寫一個程序,主要實現了從多個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()是程序睡眠,但仍然沒有效果,不知是何原因。請各位高手不吝賜教,我該如何改變我的程序結構,請稍微詳細一點,我剛入門,知識還比較欠缺。
查看完整描述

2 回答

?
守著一只汪

TA貢獻1872條經驗 獲得超4個贊

用 BackgroundWorker 控件。具體可見 MSDN。

查看完整回答
反對 回復 2018-10-22
?
當年話下

TA貢獻1890條經驗 獲得超9個贊

判斷是否完成的While循環是在窗體的主線程中運行的,窗口當然會失去響應了??梢栽賳右粋€線程執行判斷。或用用 BackgroundWorker 控件

查看完整回答
反對 回復 2018-10-22
  • 2 回答
  • 0 關注
  • 426 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號