// from www.danielmoth.com/Blog/ internal static class MyNetwork { public static event System.Action ConnectionEstablished; public static void MonitorNetworkAvailability() { MyNetwork.CheckConnection(); System.Net.NetworkInformation.NetworkChange.NetworkAddressChanged += (sender, e) => MyNetwork.CheckConnection(); } public static bool IsConnected { get { MyNetwork.CheckConnection(); return _isConnected; } private set { if (_isConnected != value) { _isConnected = value; if (value == true && ConnectionEstablished != null) { ConnectionEstablished(); } } } } private static void CheckConnection() { System.Threading.ThreadPool.QueueUserWorkItem(_ => MyNetwork.IsConnected = (Microsoft.Phone.Net.NetworkInformation.NetworkInterface.NetworkInterfaceType != Microsoft.Phone.Net.NetworkInformation.NetworkInterfaceType.None)); } [System.Diagnostics.Conditional("DEBUG")] internal static void DebuggerChangeStatus(bool isConnected) { _isConnected = !isConnected; MyNetwork.IsConnected = isConnected; } private static bool _isConnected; }