我的目的是要下載網頁後,匯出內容做進一步處理
我使用 WebClient.DownloadFile() 下載
下載失敗等待幾秒後重新下載
但如果是下載卡住,我就不知道怎麼處理了
有一定機率會發生這種狀況
http://pastebin.com/CLQ1U8aF
Wesley Hsu wrote:
下載資料一定會有錯誤...(恕刪)
這個問題我會處理
http://pastebin.com/QkmArSp0
我的不會的是
當資料下載到一半時停住或是變超慢
我要怎麼讓它放棄這次下載
Wesley Hsu wrote:
要使用非同步作業,這...(恕刪)
這東西好難寫,目前只能做到這樣
http://pastebin.com/UyjG4c1p
還有好多問題沒解決
下載完成前禁用 buttonStart
下載完成後啟用 buttonStart
用按鈕取消下載
下載超時自動取消
...
看著寫完的 Code 總感覺我的寫法好像走了歪路...
vxr wrote:
為什麼你不使用Web...(恕刪)
擷取進度與狀態 還是需要自行呼叫非同步處裡吧
寫成 Class 後,反而不知道怎麼回報下載狀態
http://pastebin.com/3ZyVDtrr
kingdragon wrote:
擷取進度與狀態 還是...(恕刪)
請參閱MSDN公開的%ProgressChanged event handler...
另外, 你可以使用lambda運算式精簡event handler的委派..
http://msdn.microsoft.com/zh-tw/library/bb397687.aspx
如果你的方法只會參照一次..
可以改用匿名方法結合lambda運算式進行操作...
雖然這不是甚麼很必要..
不過不需要DataTable物件..
因為他是弱型資料物件..
為了展性更強的可讀性..
你可以自行撰寫資料物件封裝...
然後再加入到一個collection物件..
vxr wrote:
不過不需要DataTable物件
感謝前輩相助
http://pastebin.com/PY3xM4Sc
每個的檔案大小都不一樣,取下載進度太麻煩了
反正我只是要抓HTML與圖片,檔案都很小,只要知道已下載數就好
雖然我沒有遇到問題
但是否有必要限制同時下載數
kingdragon wrote:
感謝前輩相助http...(恕刪)
你的代碼有一些問題需要改善:
1. 可在精簡以及避免邏輯泥藻減少代碼維護上的困擾.
2. 請將資料物件與所在業務類別拆開.
3. WebClient建立一次就好了.
4. 可將資料物件傳入UserState. 在非同步事件發生時, 可拿來做利用.
你全部方法都加入static的修飾詞, 顯然這是毫無必要的...
因為這全部都不是甚麼工具方法, 也不是類似甚麼工廠(Factory)物件生成的策略(Strategy)...
這個類別的代碼依然可以做更多改善...
比方說可以簡化到剩下幾種方法:
1. AttachFile(string source, string dirPath, string fileName) //附加檔案至集合
2. BeginDownload() //retry操作可以合併到這邊
3. DownloadFileCompleted(object sender, AsyncCompletedEventArgs e) //非同步事件
盡可能讓一個類別所承擔的"責任"愈單純愈好...




























































































