GetgattservicesAsync friert nach dem Wechsel zu einem anderen Gerät mit demselben Service einC#

Ein Treffpunkt für C#-Programmierer
Guest
 GetgattservicesAsync friert nach dem Wechsel zu einem anderen Gerät mit demselben Service ein

Post by Guest »

Ich habe ein seltsames Problem, wenn ich BLE -Geräte ändere, die die gleiche Funktionalität liefern. Wenn ich es paare, kann ich es dann entdecken, zusammenstellen, die Daten verbinden und die Daten erneut abrufen. Dienste und Eigenschaften usw. Dann gibt es zunächst einen Aufruf an DeviceInformation.findallasync () (um Geräte mit meinem Dienst zurückzugeben) gibt keine Ergebnisse zurück, und ein Anruf bei Bluetoothledevice.getGattServicesAsync () hängen und und Niemals kehrt zurück.

Code: Select all

bthserv
). Dies wird dann automatisch neu gestartet und ich kann dann mit dem Paar und einer Verbindung fortfahren und wieder mit dem Herunterladen von Daten beginnen. < /P>
Hier ist mein Code: < /p>

Code: Select all

int retryCount = 5;
DeviceInformation deviceInfo = null;

// Sometimes Windows loses track of the services! We may need to refresh them - can sometimes take a few retries.
while (deviceInfo == null && retryCount-- > 0)
{
// after switching devices this call usually returns an empty set even though I have successfully paired the second device with the same service.
var allDeviceInfos = await DeviceInformation.FindAllAsync(GattDeviceService.GetDeviceSelectorFromUuid(MyServiceId));

deviceInfo = allDeviceInfos.FirstOrDefault(d => d.Name == device.DeviceInformation.Name);

if (deviceInfo == null)
{
_logger.LogDebug("Device not found! Retrying...");
await RefreshServices();
Thread.Sleep(1000);
}
}
< /code>
....
private async Task RefreshServices()
{
_logger.LogDebug("Refreshing the device's service list.");

var devices = await DeviceInformation.FindAllAsync(BluetoothLEDevice.GetDeviceSelector());

var myDevices = new List();

foreach (var device in devices.Where(d => d.Name.StartsWith("MyDeviceName_")))
{
var bleDevice = await BluetoothLEDevice.FromIdAsync(device.Id);

// after switching devices, the application hangs on the following line and never returns a value.
var services = await bleDevice.GetGattServicesAsync();

_logger.LogDebug($"Service list from {wristOx.Name}: Status: {services.Status}, count: {services.Services?.Count}");
}
}
Möglicherweise fragen Sie, warum ich die Methode RefreshServices () aufrufe. Dies liegt daran, dass ich in der Vergangenheit gesehen habe, dass, wenn ich keine Ergebnisse aus dem intialen FindAllasync () erhalte, die Situation zu korrigieren scheint, obwohl manchmal mehrere Wiederholungen erforderlich sind. (Ich denke, es ist eine Art Cache erfrisch > < /p>

Ich habe auch mit getgattservicesaSync (bluetoothMode.uncached) < /code> versucht, aber das gleiche Ergebnis. < /li>
Ich habe versucht, meinen Computer neu zu starten, aber das scheint GetGattservicesAsync () aus seiner Stahlsporung nicht zu nehmen! Dies ist wirklich seltsam - einen Prozess zu töten "repariert" ihn, aber das Neustarten des Computers nicht! 0 Geräte, der nachfolgende Aufruf von DeviceInformation. > Bearbeiten
Wie angefordert habe ich versucht, die Bluetooth -Protokolle mit WPR und dem von Junjie Zhu - MSFT bereitgestellten Link zu erhalten, und ich nehme mir jetzt Zeit, um zu gehen Durch das Diagramm "generische Ereignisse", die die einzige mit Informationen darin ist. Ich bin mir jedoch nicht sicher, wie ich den Hang mit den Ereignissen in diesem Diagramm übereinstimmen kann, und es gibt viel zu viele Informationen, um ihn hier einzufügen. < /P>
e.g. Ich habe diesen Abschnitt "Bluetooth" gefunden, aber die richtigen Ereignisse zum Betrachten und Interpretieren der Ergebnisse ist der schwierige Teil. "https://i.sstatic.net/yyhmh90w.png"/>
Interessanterweise stürzt WPA jedes Mal, wenn ich versuche, die RadiodiagnostictLVverbose Ereignisse zu sehen ... es ist es zu sehen ... es ist Ein ArgumentoutoFrangeException
Ein weiterer Bearbeiten
Wie angefordert sind die Protokolle von WPR. (Jeweils 21 MB)
Ausfall - Dies zeigt, wann es fehlschlägt - d. H. Ich erhalte 0 Geräte von DeviceInformation. /Code> hängt für immer. GetDeviceselectorFromuUid (myServiceid)) . However, GetGattServicesAsync() returned a list of services for the device, and after two times through this loop, DeviceInformation.FindAllAsync(GattDeviceService.GetDeviceSelectorFromUuid(MyServiceId)) then finally returns my device and I can connect dazu. . < /li>
Ich habe es jetzt auf drei verschiedenen Computern ausprobiert, und einer von ihnen hat dieses Problem nicht! Mein Entwicklungs -PC ist Windows 11 23H2 und dieses Problem ist zu sehen. Es gibt auch ein MS -Oberflächen -Go -2 -Tablet mit Windows 10 22H2, der es auch zu haben scheint. Aber ich habe eine andere MS -Oberfläche Go 2 mit Windows 10 21H2, wo ich ohne Probleme zwischen den Armband>

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post