В моем приложении UWP я отвечаю на запросы записи BLE со следующим кодом:
private async void WriteCharacteristic_WriteRequested(GattLocalCharacteristic sender, GattWriteRequestedEventArgs args)
{
string runStr = string.Empty;
var deferral = args.GetDeferral();
var request = await args.GetRequestAsync();
var reader = DataReader.FromBuffer(request.Value);
while (reader.UnconsumedBufferLength > 0)
{
var iRead = reader.ReadString(reader.UnconsumedBufferLength);
runStr = runStr + iRead;
// I tried this but it throws an exception
//uint inBufferCnt = await reader.LoadAsync(20);
}
if (request.Option == GattWriteOption.WriteWithResponse)
{
request.Respond();
}
deferral.Complete();
}
Я следую официальной документации здесь
Эточитает запрос на запись, но если отправляемый / записываемый текст слишком длинный, он обрезается.Я думаю, что должен продолжить чтение устройства чтения данных, но оно вызывает исключение, когда я пытаюсь вызвать await reader.LoadAsync(20)
:
Идентификатор операции недопустим.
Если я не вызову эту функцию, моя переменная runStr
будет содержать текст, но будет обрезана при слишком длинной.