簡體   English   中英

Xamarin.Forms Map與異步等待不相符

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM