【发布时间】:2023-03-22 04:16:01
【问题描述】:
我正在与自定义外部设备通信,并且此设备要求当我发送数据时,我必须在 10 到 100 毫秒之间再次发送相同的数据(以 10-100 毫秒的间隔发送两次数据) .
基本上发送数据效果很好,但是第二次发送在500-800毫秒之间,所以我必须减少它。
我使用Plugin.BLE
...
public async Task WriteCharacteristics(byte value)
{
try
{
byte[] data = {value};
await Service.GetCharacteristicsAsync().ContinueWith(async task =>
{
Characteristics = task.Result;
await Characteristics.First().WriteAsync(data).ContinueWith(async t1 =>
{
await Characteristics.First().StartUpdatesAsync();
});
});
}
catch (Exception e)
{
Debug.WriteLine("********* Failed to get ReadCharacteristics: " + e.Message);
}
}
...
当我打电话时:
...
_ = ble.WriteCharacteristics((byte)value).ContinueWith(_ =>
{
Thread.Sleep(10);
ble.WriteCharacteristics((byte)value).Wait();
});
...
我尝试以并行方式调用该函数两次,但该解决方案并不好。
正如您在我调用时看到的那样,它等待了 10 毫秒,并且想要再次发送数据。有什么办法可以解决这个问题吗?
【问题讨论】:
-
提示:最好不要混合异步和线程。使用
await Task.Delay(10)而不是Thread.Sleep(10) -
我也试过了,不睡觉也试过了,但第二次发送总是在 500 到 800 毫秒之间。
-
你为什么同时使用
await和ContinueWith?真正的失败是什么?您是否对检查两次WriteCharacteristics调用之间的延迟的方法进行了计时? -
我也试过没有继续。我在设备中计时以检查延迟,在设备中我看到 writeCharacteristics 成功,但在 500 - 800 毫秒之间。所以发送总是成功,而不是失败,但是我从移动设备通信的设备需要在 10 - 100 毫秒之间再次发送相同的数据
-
您的设备概念似乎有问题。绝不应该这样,您需要发送两次数据。最好在 PC 端运行数据广告,设备会在需要时捕获广告并从中获取数据。不,你不能在 Windows 上创建这种依赖时间的应用程序,因为 Windows 不是实时操作系统。
标签: c# xamarin xamarin.forms bluetooth-lowenergy