当我尝试将地图添加到地图时,应用暂停。它不会继续执行下一段代码。只有当我从等待中调用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;
}
答案 0 :(得分:2)
这里的问题是你需要从UI-Thread执行MoveToRegion。
如果使用Task.Run运行任务(()=&gt; ...您正在后台线程上调用它。
确保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;
});