使用OpenNETCF/C#获取Windows CE设备信号强度时触发InvalidCastException
Windows CE设备通过OpenNETCF获取信号强度触发InvalidCastException的解决方法
问题描述
我在全网搜索后仍未找到合适方案,需要通过OpenNETCF用C#获取Windows CE设备的信号强度,尝试了以下代码:
string x = ""; var adapters = OpenNETCF.Net.NetworkInformation.WirelessNetworkInterface.GetAllNetworkInterfaces(); foreach (WirelessNetworkInterface adapter in adapters) x = adapter.SignalStrength.Decibels.ToString(); label1.Text = x;
Visual Studio编译无错误,但在设备上运行时抛出Invalid Cast Exception。
补充堆栈跟踪
MYapp OpenNETCF.exe InvalidCastException at MYapp_OpenNETCF.Form1.button1_Click(Object sender, EventArgs e) at System.Windows.Forms.Control.OnClick(EventArgs e) at System.Windows.Forms.Button.OnClick(EventArgs e) at System.Windows.Forms.ButtonBase.WnProc(WM wm, Int32 wParam, Int32 lParam) at System.Windows.Forms.Control._InternalWnProc(WM wm, Int32 wParam, Int32 lParam) at Microsoft.AGL.Forms.EVL.EnterMainLoop(IntPtr hwnMain) at System.Windows.Forms.Application.Run(Form fm) at MYapp_OpenNETCF.Program.Main()
解决方案
问题根源
WirelessNetworkInterface.GetAllNetworkInterfaces()返回的是设备上所有类型的网络接口(包括有线网卡、蓝牙等非无线接口),直接将这些接口强制转换为WirelessNetworkInterface会触发类型转换异常。
修改后的代码
方法1:类型判断后转换
string x = ""; var adapters = OpenNETCF.Net.NetworkInformation.NetworkInterface.GetAllNetworkInterfaces(); foreach (var adapter in adapters) { // 仅处理无线网卡接口 if (adapter is WirelessNetworkInterface wirelessAdapter) { x = wirelessAdapter.SignalStrength.Decibels.ToString(); break; // 取第一个无线网卡的信号强度,可根据需求调整逻辑 } } label1.Text = x;
方法2:用OfType筛选无线接口
string x = ""; var wirelessAdapters = OpenNETCF.Net.NetworkInformation.NetworkInterface.GetAllNetworkInterfaces() .OfType<WirelessNetworkInterface>(); foreach (var adapter in wirelessAdapters) { x = adapter.SignalStrength.Decibels.ToString(); break; } label1.Text = x;
额外说明
- 改用
NetworkInterface.GetAllNetworkInterfaces()获取全量接口,再筛选无线类型,避免强制转换错误。 - 如果设备存在多个无线网卡,可通过
adapter.Name等属性匹配目标接口,调整循环逻辑。
内容的提问来源于stack exchange,提问作者crooked_nose
相关产品推荐
相关产品推荐

