2011-01-22 21 views
0

我有我使用上傳下列方式文件的Web客戶端,base64Encoded是編碼爲Base64字符串的圖片,因爲這是什麼imgur服務器預計:WebClient.UploadValuesAsync沒有更新進度正常

public Upload() 
    { 
     WebClient webClient = new WebClient(); 
     webClient.UploadProgressChanged += new UploadProgressChangedEventHandler(webClient_UploadProgressChanged); 
     webClient.UploadValuesCompleted += new UploadValuesCompletedEventHandler(webClient_UploadValuesCompleted);  

     NameValueCollection values = new NameValueCollection(); 
     values.Add("key", "imgur api key"); 
     values.Add("image", base64Encoded); 
     webClient.UploadValuesAsync(new Uri("http://api.imgur.com/2/upload"), "POST", values);   
    } 

這是UploadProgressChanged事件處理程序:

private void webClient_UploadProgressChanged(object sender, UploadProgressChangedEventArgs e) 
    { 
     int percentage = e.ProgressPercentage * 2; 

     progressBar.Value = percentage; 
     percentageTextBlock.Text = (percentage).ToString() + "%"; 
    } 

現在我的問題是,事件處理程序在一開始只叫一次,報告的50 ProgressPercentage,然後沒有再調用。文件上傳成功,但我的進度條不起作用。這並不是因爲我正在上傳一個小文件,因爲我也嘗試過使用幾個MB的文件,它也會立即報告一個ProgressPercentagee.BytesSent也沒有幫助,因爲那一個也等於e.TotalBytesToSend。這裏發生了什麼?

回答

1

有一個bug with this event已在.NET 4.0中修復。這是一個related post

+0

我明白了。我改變了我的項目目標.NET 4.0而不是3.5,它確實工作得很好。但是,我不想使用.NET 4.0,因爲我的大多數用戶仍然會使用.NET 3.5,並且不希望僅爲我的應用安裝4.0。有沒有可能的解決方法?我應該在另一個線程上使用UploadValues()方法,然後自己更新GUI嗎? – dimski 2011-01-22 15:21:36