2011-04-03 69 views
0

我有一個Silverlight應用程序。我想跟蹤我的應用程序中是否有人在線或離線。因此,我想我會確定在App.xaml.cs文件中。在試圖做到這一點,我添加以下代碼:C中的靜態事件處理程序#

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); 
} 

我的希望是,在我的應用程序頁面可以綁定到這個事件處理程序,並作出相應的反應,並檢查App.IsOnline。但是,我不知道如何正確連線。在App.xaml.cs我啓動的事件處理程序,我有以下代碼:

NetworkChange.NetworkAddressChanged += new NetworkAddressChangedEventHandler(NetworkChange_NetworkAddressChanged); 

抱歉,系統的NetworkChange_NetworkAddressChanged事件處理程序不會被調用。我正在嘗試做什麼?如果是這樣,怎麼樣?

+0

你是怎麼測試的?你有沒有取下電纜,關閉無線? – 2011-04-03 17:07:57

+0

一般要小心靜態事件。事件對對象有強烈的引用,所以事件的任何訂閱者都應該在不再使用該對象以使其獲得GCed時使用' - ='。 – vcsjones 2011-04-03 17:13:58

回答

2

只聲明一個事件是不夠的,必須有實際引發事件的代碼。看起來你嘗試了一些事情,最終導致另一場事件再次發生。還不夠好。

該代碼否則很難得到,NetworkInterface類本身沒有任何事件。您需要使用定時器並定期調用GetIsNetworkAvailable()。現在,您可以在返回值更改時觸發事件。

+0

讓我重新修改一下。我試圖綁定到NetworkChange.NetworkAddressChanged事件(http://msdn.microsoft.com/en-us/library/system.net.networkinformation.networkchange.networkaddresschanged(v=VS.95).aspx)在我的App.xaml.cs.當這個事件觸發時,我想做一些工作,然後發起我的代碼可以訂閱的事件。這可能嗎? – user687554 2011-04-03 20:58:23

+0

* IP地址*發生更改時引發該事件。這將是非常罕見的,你必須(比如說)強制DHCP續約。你真的*想要觀察什麼? – 2011-04-03 22:09:38