Консультация № 158395
22.01.2009, 02:23
0.00 руб.
0 2 2
Уважаемые эксперты!
Такой вопрос: следующая конструкция (Visual Basic.NET)
myHttpWebResponse = myHttpWebRequest.GetResponse()
Dim myStreamReader = New StreamReader(myHttpWebResponse.GetResponseStream, Encoding.GetEncoding(1251))
Docum1 = myStreamReader.ReadToEnd
хорошо работает, если сервер отвечает быстро. Если сервер перегружен – приложение зависает секунд на 30 до получения ответа сервера. Проблему не решает ни это:
Do
Application.DoEvents()
Docum1 = Docum1 + myStreamReader.ReadLine
Loop Until myStreamReader.EndOfStream
Ни это:
Do
Application.DoEvents()
Docum1 = Docum1 + Chr(myStreamReader.Read)
Loop Until myStreamReader.EndOfStream
Пробовал помещать этот блок на отдельную форму – тот же результат.
Как быть?
Заранее, спасибо, Игорь.

Обсуждение

Неизвестный
22.01.2009, 20:25
общий
это ответ
Здравствуйте, Фидаков!

Используйте потоки.

Обратите пристальное внимание на пространство имён System.Threading.

Создайте какой-нибудь backgroundworkerprocess и работайте с ним.

Удачи.
Неизвестный
22.01.2009, 22:16
общий
это ответ
Здравствуйте, Фидаков!

Application.DoEvents() - точно не поможет, поскольку приложение виснет именно на myStreamReader.Read, то есть до Application.DoEvents() не доходит.
Если использование HttpWebRequest не принципиально и задча только в том, что вы написали то посоветую использовать System.Net.WebClient с асинхронными функциями, если же нужен именно такой способ, то присоединяясь к предыдущему эксперту посоветую использовать класс System.ComponentModel.BackgroundWorker, если не хочется возиться с System.Treading.
Форма ответа