Você pode dar uma olhada neste artigo . Trata-se de rastrear conexões de rede alteradas e usa o Win32-api.
Existem também eventos .Net para mudanças de rede. Mas, conforme descrito nesta StackOverflow-Question , eles não são rápidos ou não confiável.
Além disso, uma conexão de rede disponível nem sempre é igual a uma conexão de Internet disponível. Você tem que testar se uma conexão de internet é estabelecida.
Eu não sei como verificar a conexão à Internet, mas afaik microsoft está pingando seu próprio site para determinar se há uma conexão disponível e atualizar o ícone de conexão de rede na bandeja do sistema. Para o seu propósito, seguir o snipet de código pode fazer o trabalho:
try
{
System.Net.IPHostEntry = System.Net.Dns.GetHostByName("www.google.com");
return true;
}
catch
{
return false; // host not reachable.
}