2013-03-04 101 views
1

我收集所有networkadapterconfigurations從C#中的Win32_NetworkAdapterConfiguration類。 我使用此查詢:win32_networkaddressconfiguration沒有IP地址

private String strDetailedInterfaces = 
         @"SELECT * 
         FROM Win32_NetworkAdapterConfiguration 
         WHERE DHCPEnabled = 'TRUE'"; 

但是,在選擇,我用它來連接到互聯網的networkadapter時,它說,IPEnabled = false,當我打電話陣列IPAddresses,我得到NullPointerException異常(這意味着數組=空值)。

我所說的地址是這樣的:

ManagementObject choosen = (ManagementObject)eInterfacesConfig.Current; 
String[] ipAddresses = (String[]) choosen["IPAddress"]; 
lblIP.Text = ipAddresses[0]; 

eInterfacesConfigManagementObjectCollection.Enumerator和 choosen是當前ManagementObject出枚舉。

我試圖改變標籤(lblIP)到陣列中的第一個IP地址的文本。但這是異常拋出的地方。

有人能解釋爲什麼,也許指向我到正確的方向?

+0

對不起Soner格尼爾,我會注意的是下一次;) – DerpyNerd 2013-03-04 19:07:27

回答

1

以下查詢將返回我的Windows 8機器上有兩個Win32_NetworkAdapterConfiguration對象 :

ManagementObjectSearcher query = 
    new ManagementObjectSearcher("SELECT * FROM Win32_NetworkAdapterConfiguration WHERE DHCPEnabled ='TRUE'"); 

ManagementObjectCollection queryCollection = query.Get(); 
queryCollection = query.Get(); 

foreach (ManagementObject currentConfig in queryCollection) 
{ 
    string[] addresses = (string[])currentConfig["IPAddress"]; 

    Console.Out.WriteLine(currentConfig["Description"]); 
    if (addresses != null) 
    { 
    foreach (var addr in addresses) 
    { 
     Console.Out.WriteLine(addr); 
    } 
    } 
} 

第一適配器配置是微軟內核調試網絡適配器。 該適配器用於遠程內核調試。該適配器的DHCPEnabled屬性 是TRUE。但是沒有分配給此適配器的IP地址 。這就是爲什麼IPAddress數組爲null的原因。

第二適配器配置是我英特爾千兆網絡適配器。有 是分配給適配器的兩個IP地址。

另一個原因IPAddress陣列可以爲空是 例如斷開無線網絡適配器

因此,爲了解決您的NullReferenceException你必須檢查 IPAddress數組無效(請參見上面的代碼)。使用Description 屬性來標識適配器配置。

+0

你好,對不起,如果我不是很清楚。 在我的程序中,我確實在'ManagementObject'('choosen')中有正確的適配器。這是我現在用來訪問互聯網的高通無線網絡適配器。 這就是爲什麼它是奇怪的是,數組爲空並啓用了IP是假 – DerpyNerd 2013-03-04 19:41:18

+0

@RobbieVercammen:好的,我明白了。您是否在網絡適配器上啓用了IPX(IPXEnabled屬性的值是什麼)? – Hans 2013-03-04 20:02:31

+0

謝謝你幫助我。在我的任何適配器上未啓用IPX – DerpyNerd 2013-03-04 20:35:15