C# Xamarin.表单映射不';无法使用异步等待
当我尝试在地图上添加pin时,应用程序会停止。它不会继续执行下一段代码。只有当我从等待中调用DoWork时才会发生这种情况;但是,不调用wait不会停止应用程序 所谓暂停,我的意思是它不会使应用程序崩溃,它只是不执行下一行代码,但我仍然可以与应用程序交互 我是否遗漏了什么或使用异步错误C# Xamarin.表单映射不';无法使用异步等待,c#,xamarin,xamarin.ios,xamarin.forms,async-await,C#,Xamarin,Xamarin.ios,Xamarin.forms,Async Await,当我尝试在地图上添加pin时,应用程序会停止。它不会继续执行下一段代码。只有当我从等待中调用DoWork时才会发生这种情况;但是,不调用wait不会停止应用程序 所谓暂停,我的意思是它不会使应用程序崩溃,它只是不执行下一行代码,但我仍然可以与应用程序交互 我是否遗漏了什么或使用异步错误 Map myMap; public MyViewModel(Map map) { myMap = map; // Causes crash Task.Run(async () =>
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;
}
Map-myMap;
公共MyViewModel(地图)
{
myMap=map;
//导致崩溃
Task.Run(异步()=>
{
等待嫁妆();
});
//不会导致崩溃
//销钉();
}
异步任务DoWork()
{
var成功=false;
Task=null;
task=SomeTask();
如果(等待任务)
{
var pin=MyPin();
myMap.Pins.Add(pin);
//调用Wait Dowork()时从不调用此函数。应用程序停止。
myMap.MoveToRegion(MapSpan.FromCenterAndRadius(MyPosition(),Distance.FromMiles(5));
成功=真实;
}
回归成功;
}
公共密码MyPin()
{
var引脚=新引脚();
pin.Type=PinType.Place;
销位置=新位置(,);
回位销;
}
这里的问题是您需要从UI线程执行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;
});
真不敢相信我错过了!