BluetoothLEAdvertisementWatcher.Received事件绑定报错解决方案咨询
解决BluetoothLEAdvertisementWatcher事件绑定错误的方案
1. 先理清错误根源
你碰到的问题大多是环境不兼容或API调用方式不对导致的:
Received事件不支持直接用+=绑定的错误,通常出现在非标准.NET环境(比如Unity Mono、旧版.NET框架)调用WinRT蓝牙API时——WinRT事件的访问器是显式的add_Received/remove_Received,常规C#事件语法在这些环境里不被支持。mscorlib not found则是手动添加了不必要的引用,这个程序集是系统自动根据目标框架引入的,手动添加会导致版本冲突。
2. 正确绑定Received事件的两种方法
方法一:显式调用访问器(适配特殊环境)
直接调用add_Received方法,注意委托签名必须完全匹配WinRT的要求:
// 先定义符合签名的事件处理方法 private void HandleAdvertisementReceived(BluetoothLEAdvertisementWatcher sender, BluetoothLEAdvertisementReceivedEventArgs args) { // 这里写你的广告数据处理逻辑 } // 绑定事件 var watcher = new BluetoothLEAdvertisementWatcher(); watcher.add_Received(new TypedEventHandler<BluetoothLEAdvertisementWatcher, BluetoothLEAdvertisementReceivedEventArgs>(HandleAdvertisementReceived));
方法二:常规C#事件语法(标准.NET环境优先用)
如果是标准.NET Framework/.NET Core/.NET 5+环境,直接用+=绑定即可,若之前报错,检查项目配置:
var watcher = new BluetoothLEAdvertisementWatcher(); watcher.Received += HandleAdvertisementReceived; // 对应的处理方法 private void HandleAdvertisementReceived(object sender, BluetoothLEAdvertisementReceivedEventArgs e) { // 处理逻辑 }
3. 修复“mscorlib not found”错误
- 立即删除项目中手动添加的mscorlib引用,系统会自动根据目标框架引入正确版本。
- 检查项目目标框架:
- UWP项目:确保目标版本不低于Windows 10 15063(Creators Update);
- 桌面项目:安装
Windows Runtime API PackNuGet包来获取WinRT蓝牙API。
- 清理项目的bin/obj目录,然后重新编译。
4. 额外排查要点
- 确认应用已获取蓝牙权限:UWP需在Package.appxmanifest中添加
<DeviceCapability Name="bluetooth" />;桌面应用需在系统设置中授予蓝牙访问权限。 - 若是Unity项目:在Player Settings中开启“Allow 'unsafe' code”,并确保导入了Windows蓝牙相关的Unity兼容包。
内容的提问来源于stack exchange,提问作者José Francisco
相关产品推荐
相关产品推荐

