c#蓝牙LE - 写配置错误 - 从未调用ValueChanged

时间:2017-09-11 20:12:53

标签: c# wpf bluetooth bluetooth-lowenergy

所以我尝试将我的c#WPF程序连接到BLE设备,这是连接到设备的代码:

private async Task ConnectToWatcher(DeviceInformation deviceInfo) {
        try {
            // get the device
            BluetoothLEDevice device = await BluetoothLEDevice.FromIdAsync(deviceInfo.Id);

            // get the GATT service
            Thread.Sleep(150);
            var gattServicesResult = await device.GetGattServicesForUuidAsync(new Guid(RX_SERVICE_UUID));
            service = gattServicesResult.Services[0];

            // get the GATT characteristic
            Thread.Sleep(150);
            var gattCharacteristicsResult = await service.GetCharacteristicsForUuidAsync(new Guid(RX_CHAR_UUID));
            characteristic = gattCharacteristicsResult.Characteristics[0];

            // register for notifications
            Thread.Sleep(150);

            characteristic.ValueChanged += (sender, args) => {
                Debug.WriteLine($"[{device.Name}] Received notification containing {args.CharacteristicValue.Length} bytes");
            };

            GattWriteResult result =
            await characteristic.WriteClientCharacteristicConfigurationDescriptorWithResultAsync(GattClientCharacteristicConfigurationDescriptorValue.Notify);
            Debug.WriteLine($"Characteristics write result: status={result.Status}, protocolError={result.ProtocolError}");

        } catch (Exception ex) when ((uint)ex.HResult == 0x800710df) {
            Debug.WriteLine("bluetooth error 1");
            // ERROR_DEVICE_NOT_AVAILABLE because the Bluetooth radio is not on.
        }
    }

该行

 Debug.WriteLine($"Characteristics write result: status={result.Status}, protocolError={result.ProtocolError}"

创建输出 特征写入结果:status = protocolError,protocolError = 3 我无法找到任何意味着什么的东西。效果是方法特征.ValueChanged 永远不会被调用。

我是否必须做更多才能具有可配置的特性?并且有任何人知道为什么不调用该方法或该错误消息意味着什么?

非常感谢。

2 个答案:

答案 0 :(得分:1)

显然,某些Windows 10版本存在COM安全漏洞。 解决方案是注册Windows-Insider-Program并更新Windows。

<强>更新 还有两个解决方案: 1)从你的c#-code外部调用CoInitializeSecurity(没有让它工作) - 要么- 2)将两个新密钥写入Windows注册表。您可以创建一个文件“Bluetooth.reg”,它将在doubleklick上添加这两个键。 https://social.msdn.microsoft.com/Forums/en-US/58da3fdb-a0e1-4161-8af3-778b6839f4e1/bluetooth-bluetoothledevicefromidasync-does-not-complete-on-10015063?forum=wdk的答案是我的解决方案:

  

嗨Kamen,我遇到了完全相同的问题。您可以快速尝试以下内容:

           

Windows注册表编辑器版本5.00

     

[HKEY_LOCAL_MACHINE \ SOFTWARE \类\ {的AppID C6BFD646-3DF0-4DE5-B7AF-5FFFACB844A5}]   “AccessPermission”=十六进制:01,00,04,80,9c,00,00,00,交流,00,00,00,00,00,00,00,14,00,\     00,00,02,00,88,00,06,00,00,00,00,00,14,00,07,00,00,00,01,01,00,00,00,00,00, \     05,0a,00,00,00,00,00,14,00,03,00,00,00,01,01,00,00,00,00,00,05,12,00,00,00, \     00,00,18,00,07,00,00,00,01,02,00,00,00,00,00,05,20,00,00,00,20,02,00,00,00, \     00,18,00,03,00,00,00,01,02,00,00,00,00,00,0f,02,00,00,00,01,00,00,00,00,00, \     14,00,03,00,00,00,01,01,00,00,00,00,00,05,13,​​00,00,00,00,00,14,00,03,00,00, \     00,01,01,00,00,00,00,00,05,14,00,00,00,01,02,00,00,00,00,00,05,20,00,00,00, \     20,02,00,00,01,02,00,00,00,00,00,05,20,00,00,00,20,02,00,00

     

[HKEY_LOCAL_MACHINE \ SOFTWARE \类\的AppID \ YOURAPP.exe]   “的AppID”= “{C6BFD646-3DF0-4DE5-B7AF-5FFFACB844A5}”

  
      
  1. 将上述内容复制到文本文件中。

  2.   
  3. 将'YOURAPP.EXE'替换为您的可执行文件名

  4.   
  5. 可选择替换GUID(我为您创建了一个新的)

  6.   
  7. 保存扩展名为.reg

  8. 的文本文件   
  9. 双击该文件。

  10.   
  11. 您会看到一条消息'.....。中包含的密钥和值已成功添加到注册表中。'

  12.         

    有了这个,我不需要从我的应用程序调用CoInitializeSecurity。

答案 1 :(得分:-1)

你需要在

之前调用CoInitializeSecurity

这里有更多信息。我花了几周时间寻找解决方案:)

https://social.msdn.microsoft.com/Forums/en-US/58da3fdb-a0e1-4161-8af3-778b6839f4e1/