2011-05-10 61 views
1

每當我在GUI點擊一個按鈕,這個代碼得到執行代碼無法下載文件時不止一次

this.file_name = @"c:\temp\file_" + DateTime.Now.Ticks/10000 +".pdf"; 

client.DownloadFileCompleted += 
        new AsyncCompletedEventHandler(pdfDownloadComplete); 

client.DownloadFileAsync(new Uri(uri), file_name); 

它應該下載一個PDF文件。它第一次點擊它就能正常工作,但第二次它只是在臨時目錄中創建一個空文件並且什麼也沒下載,我點擊相同的按鈕,然後沒有新的事情發生。

我無法弄清楚爲什麼它不會下載多次。

後來編輯

這是需要http://pastie.org/private/y7na2f4fjdu6anzteoa

我注意到了完整代碼,如果我刪除檢查內容類型的下載,應用程序下載的文件沒有問題

client.HeadOnly = true; 
byte[] body = client.DownloadData(uri); // note should be 0-length 
string type = client.ResponseHeaders["content-type"]; 
client.HeadOnly = false; 

不過,我需要知道如果我從該URL獲取文件的文本,所以我需要進行該調用。

+4

什麼類型是客戶端? pdfDownloadComplete是做什麼的? – 2011-05-10 16:24:09

+0

我添加了一些更多的代碼,所以事情更清晰一些。 pdfDownloadComplete是一個空的函數。 – b2238488 2011-05-10 16:54:13

回答

1

您的代碼至少有一個問題,可能是問題的根源:
你做了using塊內的異步下載。我真的不知道如果下載仍在運行時會發生什麼情況,但是我猜它已被取消。您應該使用DownloadFile而不是DownloadFileAsync來避免該問題。
此外,請使用正常的WebClient類而不是MyClient類來檢查它是否正常工作。

+0

我試過使用'DownloadFile'和'DownloadFileAsync',它們都給出了相同的結果。我使用'MyClient'類來獲取在URL中找到的內容的內容類型,所以我知道我得到了一個文件或一個文本(在發生錯誤的情況下)。 – b2238488 2011-05-10 17:06:04