You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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 Pack NuGet包来获取WinRT蓝牙API。
  • 清理项目的bin/obj目录,然后重新编译。

4. 额外排查要点

  • 确认应用已获取蓝牙权限:UWP需在Package.appxmanifest中添加<DeviceCapability Name="bluetooth" />;桌面应用需在系统设置中授予蓝牙访问权限。
  • 若是Unity项目:在Player Settings中开启“Allow 'unsafe' code”,并确保导入了Windows蓝牙相关的Unity兼容包。

内容的提问来源于stack exchange,提问作者José Francisco

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.30 12:23:22