#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 ...