2017-04-10 29 views
0

當我嘗試添加一個別針到地圖時,應用程序停止。它不會繼續執行下一段代碼。只有當我從等待中調用DoWork時纔會發生這種情況;然而,不打電話等待不會暫停應用程序。Xamarin.Forms地圖不相處異步等待

通過halt,我的意思是它不會崩潰應用程序,它只是不執行下一行代碼,我仍然可以與應用程序進行交互。

我錯過了什麼或使用異步錯誤?

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; 
} 

回答

1

這裏的問題是你需要從UI線程執行MoveToRegion。

如果與Task.Run(()正在運行的任務=> ...要調用它在後臺線程。

,以確保UI操作是在mainthread做,你可以迫使它

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; 
}); 
+0

不能相信我錯過了! – MartDavious