我有这段代码,但是由于期望我的方法异步而失败:
MessagingCenter.Subscribe<CardsViewModel, ParamViewModel>(this, "CardBtn", (s, cmdParams) =>
{
if (Counts.phaseTableSelectedCardCount != 0)
{
var canContinue = await DisplayAlert("Selector", "Changing this will remove all previously selected cards from the deck", "OK", "Cancel");
if (canContinue == false)
return;
}
var settingId = vm.SetButtons(cmdParams);
detailsLayout.Children.Clear();
IsBusy = true;
Change.cardSelection = true;
await Task.Run(() => UpdateSettingsAndGetData(settingId));
AddDetailSection();
IsBusy = false;
});
有没有一种方法可以向其中添加异步功能,如果可以,我需要在哪里添加它?
答案 0 :(得分:3)
当然,只需在参数前添加async关键字即可。
MessagingCenter.Subscribe<CardsViewModel, ParamViewModel>(this, "CardBtn", async (s, cmdParams) => ...
请注意,我是如何在async
之后添加"CardBtn",
关键字的。请记住,lambda只是内联方法。您只是在这里声明一个方法签名,而没有几件事。
我看到您正在设置IsBusy
布尔值,我认为它会更新UI。请注意,由于消息传递发生在后台线程上,因此您可能需要Device.BeginInvokeOnMainThread
才能进入UI线程。