Веб-клиент + UploadStringAsync + События: UploadProgressChanged / DownloadProgressChanged

Исключение нулевого указателя генерируется, когда приложение пытается использовать null в случае, когда требуется объект. К ним относятся:

  1. Вызов метода экземпляра объекта null.
  2. Доступ или изменение поля объекта null.
  3. Принимая длину null, как если бы это был массив.
  4. Доступ или изменение слотов null, как если бы это был массив.
  5. Бросок null как будто это было значение Throwable.

Приложения должны бросать экземпляры этого класса, чтобы указать на другие незаконные использования объекта null.

Ссылка: http://docs.oracle.com/javase/8/docs/api/java/lang/NullPointerException.html

1
задан ssinfod 6 April 2019 в 00:14
поделиться

1 ответ

Ваш код выше загружает , поэтому он не может получить событие 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.

0
ответ дан Simon Mourier 6 April 2019 в 00:14
поделиться
Другие вопросы по тегам:

Похожие вопросы: