DownloadStringAsync() не загружает строку асинхронно

#c# #asynchronous #webclient #downloadstring

#c# #асинхронный #webclient #downloadstring

Вопрос:

Пытаюсь реализовать downloadStringAsync() предотвращение зависания пользовательского интерфейса на 10 секунд при загрузке одного байта данных. Однако, даже несмотря на завершение загрузки, пользовательский интерфейс зависает так же, как если бы я использовал downloadString() .

Вот мой код:

     public void loadHTML()
    {
            WebClient client = new WebClient();

            // Specify that the DownloadStringCallback2 method gets called
            // when the download completes.
            client.DownloadStringCompleted  = new DownloadStringCompletedEventHandler(loadHTMLCallback);
            client.DownloadStringAsync(new Uri("http://www.example.com"));
            return;
    }

    public void loadHTMLCallback(Object sender, DownloadStringCompletedEventArgs e)
    {
        // If the request was not canceled and did not throw
        // an exception, display the resource.
        if (!e.Cancelled amp;amp; e.Error == null)
        {
            string result = (string)e.Resu<

            // Do cool stuff with result

        }
    }
  

Комментарии:

1. Вы загружаете один байт данных и замечаете значительную задержку, асинхронную или нет? Это само по себе огромная проблема. Это действительно весь код? Если вы уверены, что ваше интернет-соединение не работает со скоростью 1 бит / с, я думаю, у вас там есть другой код. Создание нового потока для асинхронной загрузки чего-либо должно занимать примерно столько же времени, сколько синхронная загрузка одного байта. Также может быть, что DownloadStringAsync синхронно проверяет заголовки, подключение к Интернету или что-то еще перед созданием и выполнением нового потока, но это предположение.

2. Добавлено WebRequest.DefaultWebProxy = null; , и теперь все работает нормально! Похоже, что причиной задержки было автоматическое определение прокси-сервера.

3. Где «веб-запрос. DefaultWebProxy = null;»? Я не смог найти свойство с именем «DefaultWebProxy» для класса WebRequest, @Johnny.

Ответ №1:

Столкнулся с той же проблемой и нашел решение. Довольно сложное обсуждение здесь: http://social.msdn.microsoft.com/Forums/en-US/a00dba00-5432-450b-9904-9d343c11888d/webclient-downloadstringasync-freeze-my-ui?форум=ncl

Короче говоря, проблема в том, что веб-клиент ищет прокси-серверы и зависает приложение. Помогает следующее решение:

 WebClient webClient = new WebClient();
webClient.Proxy = null;
... Do whatever else ...