2015-09-27 194 views
1

我正在Xamain.Forms中构建BLE应用程序。我使用的引发许多基于事件的方法的适配器,例如adapter.DeviceDiscovered等处理进行:未将对象引用设置为对象的实例解决方法

  1. 扫描设备
  2. 连接到选择的装置
  3. 扫描Services存在于设备
  4. 设备上选择一个Service
  5. 扫描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后阅读该方法,我该如何做?

回答

1

检查Activity Lifecycle,看是否有会做的状态,你想
如果不是,后一个完整的任务的考虑使用任务和设置的程序来运行什么

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

检查更多Tasks.ContinueWithhere

+0

谢谢你。不幸的是,这没有一个应用程序生命周期。为了我。我对Tasks非常熟悉,但是对他们没有太多经验。你会如何建议我实施这个? –

+0

在用'CharacteristicsDiscovered'填充'ChosenService'的函数运行你的代码后,就像在我发布的代码中一样,请用更多的代码更新你的问题(这个代码必须首先实现在哪里?),以便更准确 – CDrosos

相关问题