Исключение нулевого указателя генерируется, когда приложение пытается использовать null в случае, когда требуется объект. К ним относятся:
null
. null
. null
, как если бы это был массив. null
, как если бы это был массив. null
как будто это было значение Throwable. Приложения должны бросать экземпляры этого класса, чтобы указать на другие незаконные использования объекта null
.
Ссылка: http://docs.oracle.com/javase/8/docs/api/java/lang/NullPointerException.html
Ваш код выше загружает , поэтому он не может получить событие DownloadProgressChanged .
Правило - все асинхронные методы Download или Upload вызывают соответствующие события, измененные в ходе процесса Download или Upload. Под сценой UploadStringAsync использует тот же код, что и UploadDataAsync (поскольку строка представляет собой массив байтов по модулю кодировки символов).
Не асинхронные методы не вызывают события прогресса.
Если вам нужен доступ к базовому WebRequest, просто создайте класс, производный от WebClient, и переопределите защищенный виртуальный метод GetWebRequest (адрес Uri) , например:
public class MyWebClient : WebClient
{
protected override WebRequest GetWebRequest(Uri address)
{
var request = base.GetWebRequest(address);
// do something with the request
// BTW, this is how you can change timeouts or use cookies
return request;
}
}
Обратите внимание, что вы также можете использовать более современный класс HttpClient (полностью кроссплатформенный, фреймворк и т. Д.) Вместо WebClient.