C# C语言中的静态事件处理程序#
我有一个Silverlight应用程序。我想在我的应用程序中跟踪某人是在线还是离线。因此,我想我应该在App.xaml.cs文件中确定。为了实现这一点,我添加了以下代码:C# C语言中的静态事件处理程序#,c#,silverlight,C#,Silverlight,我有一个Silverlight应用程序。我想在我的应用程序中跟踪某人是在线还是离线。因此,我想我应该在App.xaml.cs文件中确定。为了实现这一点,我添加了以下代码: internal static bool IsOnline = false; public static event EventHandler NetworkAddress_Changed; private static void NetworkChange_NetworkAddressChanged(object send
internal static bool IsOnline = false;
public static event EventHandler NetworkAddress_Changed;
private static void NetworkChange_NetworkAddressChanged(object sender, EventArgs e)
{
IsOnline = NetworkInterface.GetIsNetworkAvailable();
if (NetworkAddress_Changed != null)
NetworkAddress_Changed(null, EventArgs.Empty);
}
NetworkChange.NetworkAddressChanged += new NetworkAddressChangedEventHandler(NetworkChange_NetworkAddressChanged);
我希望我的应用程序中的一个页面可以绑定到此事件处理程序,并相应地做出响应,然后检查App.IsOnline。然而,我不知道如何正确地连接它。在App.xaml.cs的启动事件处理程序中,我有以下代码:
internal static bool IsOnline = false;
public static event EventHandler NetworkAddress_Changed;
private static void NetworkChange_NetworkAddressChanged(object sender, EventArgs e)
{
IsOnline = NetworkInterface.GetIsNetworkAvailable();
if (NetworkAddress_Changed != null)
NetworkAddress_Changed(null, EventArgs.Empty);
}
NetworkChange.NetworkAddressChanged += new NetworkAddressChangedEventHandler(NetworkChange_NetworkAddressChanged);
不幸的是,
NetworkChange\u NetworkAddressChanged
事件处理程序从未被调用。我想做的事可能吗?如果是,怎么做?仅仅声明一个事件是不够的,必须有实际引发事件的代码。看起来你尝试了一些东西,结果一件事引发了另一件事。还不够好
该代码很难获得,NetworkInterface类本身没有任何事件。您需要使用计时器并定期调用GetIsNetworkAvailable()。现在,您可以在返回值更改时触发事件。您是如何测试的?您是否拔下了电缆,关闭了无线网络?通常要小心静态事件。事件具有对该对象的强引用,因此当不再使用该对象时,该事件的任何订阅者都应该使用
-=
,以允许其获得GCD。让我重新表述一下。我正在尝试绑定到App.xaml.cs中的NetworkChange.NetworkAddressChanged事件()。当这个事件触发时,我想做一些工作,然后触发一个我的代码可以订阅的事件。这是否可能?当IP地址更改时会引发该事件。这将是非常罕见的,你必须(说)迫使DHCP租约续签。你到底想观察什么?