[英]Xamarin.Forms Map doesn't get along with async await
當我嘗試將地圖添加到地圖時,應用暫停。 它不會繼續執行下一段代碼。 只有當我從等待中調用DoWork時才會發生這種情況; 然而,沒有呼叫等待不會停止應用程序。
暫停,我的意思是它不會崩潰應用程序它只是不執行下一行代碼但我仍然可以與應用程序進行交互。
我錯過了什么或使用異步錯誤?
Map myMap;
public MyViewModel(Map map)
{
myMap = map;
// Causes crash
Task.Run(async () =>
{
await DoWork();
});
// Causes no crashes
//DoWork();
}
async Task<bool> DoWork()
{
var success = false;
Task<bool> task = null;
task = SomeTask();
if (await task)
{
var pin = MyPin();
myMap.Pins.Add(pin);
// This is never called when calling await Dowork(). Application stops.
myMap.MoveToRegion(MapSpan.FromCenterAndRadius(MyPosition(), Distance.FromMiles(5)));
success = true;
}
return success;
}
public Pin MyPin()
{
var pin = new Pin();
pin.Type = PinType.Place;
pin.Position = new Position(<latitude>, <longitude>);
return pin;
}
這里的問題是你需要從UI-Thread執行MoveToRegion。
如果使用Task.Run(()=>運行任務...則在后台線程上調用它。
為了確保在主線程上完成ui操作,你可以強制它
Device.BeginInvokeOnMainThread(() =>
{
var pin = MyPin();
myMap.Pins.Add(pin);
// This is never called when calling await Dowork(). Application stops.
myMap.MoveToRegion(MapSpan.FromCenterAndRadius(MyPosition(), Distance.FromMiles(5)));
success = true;
});
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.