C# 如何创建在MessagingCenter中运行的方法。订阅异步方法?

C# 如何创建在MessagingCenter中运行的方法。订阅异步方法?,c#,xamarin,xamarin.forms,C#,Xamarin,Xamarin.forms,我有这段代码,但它失败了,因为它希望我的方法是异步的: MessagingCenter.Subscribe<CardsViewModel, ParamViewModel>(this, "CardBtn", (s, cmdParams) => { if (Counts.phaseTableSelectedCardCount != 0) { var canContinue = await DisplayAlert("Selector", "Chang

我有这段代码,但它失败了,因为它希望我的方法是异步的:

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;
});
MessagingCenter.Subscribe(此“CardBtn”,(s,cmdParams)=>
{
如果(Counts.phaseTableSelectedCardCount!=0)
{
var canContinue=等待显示警报(“选择器”,“更改此选项将从牌组中删除所有先前选择的牌”,“确定”,“取消”);
如果(canContinue==false)
返回;
}
var settingId=vm.SetButtons(cmdParams);
detailsLayout.Children.Clear();
IsBusy=true;
Change.cardSelection=true;
等待任务。运行(()=>UpdateSettingsAndGetData(settingId));
AddDetailSection();
IsBusy=false;
});

有没有一种方法可以将async添加到其中?如果有,我需要在哪里添加它

当然,只需在参数之前添加async关键字

MessagingCenter.Subscribe<CardsViewModel, ParamViewModel>(this, "CardBtn", async (s, cmdParams) => ...
MessagingCenter.Subscribe(此“CardBtn”,异步,cmdParams)=>。。。
请注意我是如何在
“CardBtn”之后添加
async
关键字的,
。请记住lambda只是一个内联方法。您只需在此处声明一个方法签名,而不需要一些东西


我看到您正在设置
IsBusy
布尔值,我认为它会更新UI。请注意,您可能需要
设备。BeginInvokeMainThread
才能访问UI线程,因为消息传递发生在后台线程上。

当然,只需在参数之前添加async关键字即可

MessagingCenter.Subscribe<CardsViewModel, ParamViewModel>(this, "CardBtn", async (s, cmdParams) => ...
MessagingCenter.Subscribe(此“CardBtn”,异步,cmdParams)=>。。。
请注意我是如何在
“CardBtn”之后添加
async
关键字的,
。请记住lambda只是一个内联方法。您只需在此处声明一个方法签名,而不需要一些东西


我看到您正在设置
IsBusy
布尔值,我认为它会更新UI。请注意,您可能需要
Device.beginInvokeMainThread
才能访问UI线程,因为消息传递发生在后台线程上。

谢谢。关于IsBusy,这不是这个问题的一部分,因此我可能稍后会添加另一个问题。Thanks.关于IsBusy,这不是这个问题的一部分,所以我以后可能会再补充一个问题。