c # Таймер: ошибка соединения HTTP после пробуждения системы - PullRequest
1 голос
/ 27 ноября 2011

У меня есть таймер в приложении C # (Win7 64).Каждые 20 минут обратный вызов таймера получает некоторые данные через HTTP.Это работает хорошо.Но если мой компьютер засыпает на несколько часов, а затем просыпается, я получаю сообщение об ошибке HTTP, говорящее «не могу найти сервер».Сервер работает постоянно, поэтому проблема не в этом.Я подозреваю, что настоящая причина заключается в том, что, поскольку обратный вызов таймера пропускает свой «временной интервал» в течение периода ожидания, он становится «просроченным» и выполняется сразу после пробуждения, не дожидаясь, пока ПК восстановит подключение к Интернету.,Я могу решить эту проблему, добавив Thread.Sleep (5000) в начале обратного вызова, но это немного затруднительно (установление интернет-соединения может занять больше времени).Мои вопросы:

  1. После выхода из спящего режима Win действительно нужно несколько секунд для восстановления интернет-соединения?Мое соединение DSL, «всегда онлайн».

  2. Есть ли системный вызов C #, который будет ждать, пока Win установит интернет-соединение (или истечет время ожидания, если этого не произойдет, скажем,, 20 секунд)?

РЕДАКТИРОВАТЬ: Просто нашел это: Проверьте сетевое соединение в C # .Не так просто, как я надеялся, требуется последовательность проверок: любое подключение к локальной сети, поиск DNS (вне локальной сети), проверка связи с сервером (проверка определенного сервера).

Ответы [ 2 ]

2 голосов
/ 27 ноября 2011

1) Да 2) Вы можете проверить различные атрибуты соединения, например, через WMI. Смотри: http://msdn.microsoft.com/en-us/library/windows/desktop/aa394595%28v=vs.85%29.aspx а также http://msdn.microsoft.com/en-us/library/windows/desktop/aa394216%28v=vs.85%29.aspx чтобы убедиться, что у вас есть соединение, прежде чем пытаться выполнить запрос.

1 голос
/ 27 ноября 2011

Я не думаю, что вам следует беспокоиться о WMI и т. П.

Если вы не можете получить доступ к сети, установите таймер на срабатывание в течение минут вместо 20. У вас уже есть механизм ожидания,повторное использование не будет казаться глупым.

...