【发布时间】:2022-01-04 11:32:06
【问题描述】:
我正在开发 Xamarin 应用程序,并与外部自定义设备通信。我的问题很奇怪,首先是应用程序启动,并自动连接到设备,所以一切都很好。当我突然从外部设备中取出电池时,蓝牙连接断开,并且工作正常,但是当我再次打开外部设备时,我的 Xamarin 应用程序连接得很好,但订阅不再工作了。
我调试了它,但不再调用了。我认为取消订阅/订阅过程是错误的。
...
if (ble.GetConnectionStatus())
{
Device.BeginInvokeOnMainThread(() =>
{
...
ble.Adapter.DeviceConnectionLost -= Adapter_DeviceConnectionLost;
ble.Adapter.DeviceConnectionLost += Adapter_DeviceConnectionLost;
ble.PropertyChanged -= Ble_PropertyChanged;
ble.PropertyChanged += Ble_PropertyChanged;
data.PropertyChanged -= data_PropertyChanged;
data.PropertyChanged += data_PropertyChanged;
...
});
...
所以这太奇怪了,因为这是第一次工作,在启动应用程序时,但是当我在重新连接同一个订阅后调用它时不起作用。所以如果它错了,那为什么要在第一次工作呢?
我没有错误,只是重新订阅后不再触发函数。
如您所见,我需要“刷新”订阅。有没有其他方法可以解决这个问题?
【问题讨论】:
-
ble.PropertyChanged -= Ble_PropertyChanged; ble.PropertyChanged += Ble_PropertyChanged;没有多大作用。如果你重新连接,你会得到一个新的实例吗? -
@JeroenvanLangen 我在这个页面构造函数中创建了 ble 和数据实例,所以它不是一个新实例
-
所以事件应该是完整的。
-
@JeroenvanLangen 你有什么建议我错了吗?
-
“如果它错了,那为什么要在第一次做这个?” 从你提供的信息很难说。作为测试,制作一个按钮,按下时从头开始:再次创建
ble和data。然后再次连接。这在这种情况下有效吗?如果是这样,则说明这些实例无法(并且可能无法)识别在创建实例之后连接的设备。
标签: c# xamarin.forms inotifypropertychanged