2017-09-11 35 views
0

呼び出されることはありませんので、私はBLEデバイスに私のC#のWPFプログラムを接続しようと、これはデバイスに接続するためのコードです:のC#のBluetooth LE - 設定エラーを書く - にValueChanged

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. 
     } 
    } 

ライン

それが意味することになっていただきました!私はどこにも見つけることができませんでしたステータス=はProtocolError、はProtocolError = 3 :
Debug.WriteLine($"Characteristics write result: status={result.Status}, protocolError={result.ProtocolError}" 

は出力を作成します 特性結果を書き込みます。効果はメソッドの特性です.ValueChangedは呼び出されません。

特性を構成するためには、もっと多くのことを行う必要がありますか?なぜメソッドが呼び出されないのか、そのエラーメッセージが何を意味するのか、誰にも分かりません。

ありがとうございます。

答えて

1

明らかに、一部のWindows 10ビルドにはCOMセキュリティのバグがあります。 解決策は、Windows-Insider-Programに登録してWindowsを更新することでした。

更新:は これには2つの以上の溶液があります 1)あなたのC#の-code外部からCoInitializeSecurityの(仕事にそれを持っていなかった) 呼び出す - に二つの新しいキーを書き込むまたは - 2) Windowsレジストリ。ダブルクリックで2つのキーを追加するファイル "Bluetooth.reg"を作成することはできません。この回答はhttps://social.msdn.microsoft.com/Forums/en-US/58da3fdb-a0e1-4161-8af3-778b6839f4e1/bluetooth-bluetoothledevicefromidasync-does-not-complete-on-10015063?forum=wdkから私の解決策でした:

こんにちは加納、私は全く同じ問題を経験しました。


ます。Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE \ SOFTWAREのの\クラス\ AppIDの{C6BFD646-3DF0-4DE5-B7AF-5FFFACB844A5}] "AccessPermission":あなたは、次の迅速な試みを与えることができます= 16進数:01,00,04,80,9c,00,00,00、ac、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、\ ,0,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,0 0,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,20,02,00,00

[HKEY_LOCAL_MACHINE \ SOFTWARE \ Classes \ AppID \ YOURAPP.exe] "AppID" = " {C6BFD646-3DF0-4DE5-B7AF-5FFFACB844A5}」


  1. 上記の内容をテキストファイルにコピーします。

  2. 「YOURAPP」を置き換えます。あなたの実行可能ファイル名を持つEXE」

  3. はオプションのGUID(私はあなたのために新しいものを作成している)

  4. ファイル上を.reg

  5. ダブルクリックなどの拡張子を持つ保存テキストファイルを置き換えます。

  6. 「.....と.regに含まれるキーと値がレジストリに正常に追加されました」というメッセージが表示されます。

これで、私のアプリケーションからCoInitializeSecurityを呼び出す必要はありません。

-1

あなたはここに

詳細前にCoInitializeSecurityを呼び出す必要があります。数週間は、私は解決策を探して過ごした:)

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

+0

このリンクは質問に答えるかもしれないが、ここでは答えの重要な部分が含まれており、参考のためにリンクを提供することをお勧めします。リンクされたページが変更された場合、リンクのみの回答は無効になります。 - [レビューから](レビュー/低品質の投稿/ 17707088) –

+0

こんにちはEriawan、私は不可欠な情報が** CoInitializeSecurity **を呼び出すことだと思います。それだけで問題を解決することができます。この回答を否定すると、他の人が間違った解決策に費やす可能性があります。 –

関連する問題