Sé que no soy el primero en formular la pregunta: ¿Cómo puedo saber si mi aplicación está en línea o no? He encontrado esta publicación: StackOverflow. Quiero hacerlo con C# y .NET 3.5.Determinar si la conexión a Internet está disponible
La recomendación es hacer ping al recurso regularmente. No estoy muy contento con ese consejo. Preferiría detectar un cambio en la red y, a continuación, enviar un ping a mi servicio para verificar si está en línea.
.NET proporciona dos eventos para este propósito: NetworkChange.NetworkAvailabilityChanged NetworkChange.NetworkAddressChanged
El primer evento suena bien, pero se dispara sólo si la última tarjeta de red que está conectado se desconecta. Tengo varias tarjetas de red virtuales que han sido instaladas por VMWare y que están siempre en línea. El segundo evento funciona, pero entre conectar el cable de red y el evento, a menudo hay 5 segundos de tiempo de espera. El ícono de la bandeja de Windows reacciona de manera más o menos inmediata cuando estoy desconectando el cable. ¿Cuál es la mejor manera de ser tan rápido como este icono de bandeja?
Mi solución sería sondear NetworkInterface.GetAllNetworkInterfaces() cada 500 ms y para tirar mi propio evento en caso de que el estado de un adaptador de red cambia.
Tiene que haber una solución mejor :)
¿Cómo planea detectar todos los cambios de red relevantes? Realmente no hay forma de que su aplicación note si algún enlace vital se pierde en el camino. –
Ver mi edición para obtener nueva información sobre Iphlpapi.dll y NotifyAddrChange – Webleeuw
¿En línea en qué sentido? Con un servidor? Si está en línea con un servidor, ¿por qué no simplemente envía un mensaje de estado cada 5 segundos para determinar si está en línea o no? –