Я использую блок кода, полученный из блога, для загрузки изображений в IMGur с помощью API v3.
Он работает нормально, но я хотел реализовать систему индикаторов выполнения, чтобы пользователь знал, сколько было загружено, если программа имеет дело с изображениями с высоким разрешением.
Пока мне не удалось этого сделать.
Я не опытный программист, просто делаю это в качестве учебного проекта.
Код:
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
.
- Как мне внедрить систему прогресса?
- В чем разница между асинхронной и нормальной передачей?