当我尝试向 map 添加图钉时,应用程序停止运行。它不会继续执行下一段代码。只有当我从 await 调用 DoWork 时才会发生这种情况;然而,不调用 await 不会停止应用程序。
暂停,我的意思是它不会使应用程序崩溃,它只是不会执行下一行代码,但我仍然可以与应用程序交互。
我是不是遗漏了什么或使用了错误的异步?
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;
});
