我正在Xamain.Forms中构建一个BLE应用程序。我正在使用一个适配器,它根据事件触发了许多方法,例如adapter.DeviceDiscovered
等。过程如下:
Services
Service
Characteristics
我现在正在处理第5步,并拥有以下代码:
ChosenService.CharacteristicsDiscovered += (object sender, EventArgs e) => {
Debug.WriteLine("service.CharacteristicsDiscovered");
if (characteristics.Count == 0)
Device.BeginInvokeOnMainThread(() => {
foreach (var characteristic in ChosenService.Characteristics) {
characteristics.Add(characteristic);
}
});
};
但是,由于ChosenService
在步骤4完成之前为空,因此在应用程序打开时,此方法会抛出Object reference not set to an instance of an object
异常。我该如何解决这个问题?理想情况下,我想在设置ChosenService
之后我需要阅读该方法,我应该怎么做?
答案 0 :(得分:1)
检查Activity Lifecycle以确定是否存在可以执行所需操作的状态 如果没有,请考虑使用任务和设置过程在完成任务后运行
LoadData().ContinueWith(task => {
BeginInvokeOnMainThread(() => {
_myData = task.Result;
// Do Some UI stuff or something else
});
}
详细了解Tasks
和.ContinueWith
here