2011-01-22 66 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