我正在使用我从博客获得的代码块,使用API v3将图像上传到IMGur。获取异步调用的进度
它工作正常,但我想实现一个进度条系统,让用户知道已经上传了多少,如果该程序处理高分辨率图像。
到目前为止,我还没有能够这样做。
我不是一个有经验的编码员,只是将其作为一个学习项目来完成。
验证码:
public object UploadImage(string image)
{
WebClient w = new WebClient();
w.UploadProgressChanged += (s, e) => { };
w.UploadValuesCompleted += (s, e) => { };
w.Headers.Add("Authorization", "Client-ID " + ClientId);
System.Collections.Specialized.NameValueCollection Keys = new System.Collections.Specialized.NameValueCollection();
try
{
Keys.Add("image", Convert.ToBase64String(File.ReadAllBytes(image)));
byte[] responseArray = w.UploadValues("https://api.imgur.com/3/image", Keys);
dynamic result = Encoding.ASCII.GetString(responseArray); System.Text.RegularExpressions.Regex reg = new System.Text.RegularExpressions.Regex("link\":\"(.*?)\"");
System.Text.RegularExpressions.Match match = reg.Match(result);
string url = match.ToString().Replace("link\":\"", "").Replace("\"", "").Replace("\\/", "/");
textBox1.Text = url;
return url;
}
catch (Exception s)
{
MessageBox.Show("Something went wrong. " + s.Message);
return "Failed!";
}
}
起初,我尝试使用事件UploadProgressChanged
和UploadValuesCompleted
,但他们不会被触发,我的理论是,他们被触发时UploadValuesAsync
被调用,而不是UploadValues
。
- 如何实施进度系统?
- 异步和正常传输有什么区别?
UploadValuesAsync返回void,而UploadValues返回一个字节数组,有什么建议? – user2896358
您可能需要在UploadValuesCompleated事件处理程序中的'UploadValuesAsync'调用之后移动代码,并从'e.Result'中读取结果。我一回家就会更新我的答案。 – Kimmax
好吧,我现在更新了我的代码,仍未测试。让我知道如果这项工程 – Kimmax