2015-09-27 3 views
1

Я создаю приложение BLE в Xamain.Forms. Я использую адаптер, который вызывает целый ряд методов, основанных на событиях, например adapter.DeviceDiscovered и т.д. Процесс идет:Ссылка на объект не установлена ​​на экземпляр объекта, работающего вокруг

  1. Scan для устройств
  2. Подключение к выбранному устройству
  3. Scan для 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

Благодарим за это. К сожалению, для этого не существует жизненного цикла приложения. для меня. Тем не менее, я широко знаком с задачами, но не имею большого опыта с ними. Как вы предлагаете мне это реализовать? –

+0

После того, как функция, которая заполняет 'ChosenService' с' CharacteristicsDiscovered', запускает ваш код, как в коде, который у меня есть, пожалуйста, обновите свой вопрос с помощью большего количества кода (где этот код должен быть реализован первым?), Чтобы быть более точным – CDrosos

Смежные вопросы