Я знаю, что не являюсь первым, кто задает вопрос: Как узнать, подключено ли мое приложение или нет? Я нашел этот пост: StackOverflow. Я хочу сделать это с C# и .NET 3.5.Определите, подходит ли соединение с Интернетом
Рекомендация - регулярно проверять ресурсы. Я не очень доволен этим советом. Я бы скорее обнаружил изменение сети, а THEN выполнил мой сервис, чтобы проверить, находится ли он в сети.
.NET предоставляет два события для этой цели: NetworkChange.NetworkAvailabilityChanged NetworkChange.NetworkAddressChanged
Первое событие звучит хорошо, но это срабатывает только тогда, когда последняя сетевая карта, которая находится на сайте переходит в автономный режим. У меня есть несколько виртуальных сетевых карт, которые были установлены VMWare, и они всегда в сети. Второе событие работает, но между подключением сетевого кабеля и событием часто бывает 5 секунд ожидания. Значок Windows tray реагирует более или менее немедленно, когда я отсоединяю кабель. Каков наилучший способ быть таким быстрым, как этот значок в трее?
Мой обходной путь будет опрашивать NetworkInterface.GetAllNetworkInterfaces() каждые 500 мс и бросить свое собственное мероприятие в случае, когда статус сетевого адаптера изменилось.
Там должен быть лучшим решением :)
Как вы планируете выявлять все соответствующие сетевые изменения? У вашего приложения действительно нет способа узнать, потеряно ли какое-то жизненно важное звено на этом пути. –
См. Мои изменения для новой информации о Iphlpapi.dll и NotifyAddrChange – Webleeuw
Интернет в каком смысле? С сервером? Если вы находитесь в сети с сервером, почему бы просто не отправлять сообщение о состоянии каждые 5 секунд, чтобы определить, находитесь ли вы в сети или нет? – 2009-12-07 14:43:30