对象引用未设置为对象的实例

时间:2015-09-27 10:05:50

标签: c# xamarin bluetooth xamarin.ios

我正在Xamain.Forms中构建一个BLE应用程序。我正在使用一个适配器,它根据事件触发了许多方法,例如adapter.DeviceDiscovered等。过程如下:

  1. 扫描设备
  2. 连接到所选设备
  3. 扫描设备上的Services
  4. 选择Service
  5. 在设备上扫描Characteristics
  6. 我现在正在处理第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之后我需要阅读该方法,我应该怎么做?

1 个答案:

答案 0 :(得分:1)

检查Activity Lifecycle以确定是否存在可以执行所需操作的状态 如果没有,请考虑使用任务和设置过程在完成任务后运行

LoadData().ContinueWith(task => {
     BeginInvokeOnMainThread(() => {
         _myData = task.Result;
         // Do Some UI stuff or something else
     });
}

详细了解Tasks.ContinueWith here