Если я создаю экземпляр CLLocationManager только в UIThread, событие LocationUpdated будет запущено. Почему это происходит? В документации Xamarin и Apple нет никакой информации о том, что CLLocationManager должен быть created
на UIThread.Почему CLLocationManager не передает события для обработки?
Некоторый код запрашивает locationManager.RequestWhenInUseAuthorization(); NSLocationWhenInUseUsageDescription выставиться в Info.plist
private void CreateLocationManagerWorkingOption() {
ExecuteOnMainThread (() => {
locationManager = new CLLocationManager();
});
locationManager.LocationsUpdated += (object sender, CLLocationsUpdatedEventArgs e) => {
OnLocationChanged (locationManager,e.Locations [e.Locations.Length - 1]);
};
}
private void CreateLocationManagerNotWorkingOption() {
ExecuteOnSomeThread(()=> {
locationManager = new CLLocationManager();
});
locationManager.LocationsUpdated += (object sender, CLLocationsUpdatedEventArgs e) => {
OnLocationChanged (locationManager,e.Locations [e.Locations.Length - 1]);
};
}
private void StartTrackingImpl() {
ExecuteOnMainThread (() => locationManager?.StartUpdatingLocation());
}
Это влияет только на StartUpdatingLocation и другие методы обновления. Информация о конструкторе отсутствует. Кроме того, я имел в виду документацию Xamarin, потому что моно может повлиять на CLLoationManager. – Alexander