如何制作在MessagingCenter中运行的方法。订阅异步方法?

时间:2018-08-16 09:18:40

标签: c# xamarin xamarin.forms

我有这段代码,但是由于期望我的方法异步而失败:

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;
});

有没有一种方法可以向其中添加异步功能,如果可以,我需要在哪里添加它?

1 个答案:

答案 0 :(得分:3)

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

MessagingCenter.Subscribe<CardsViewModel, ParamViewModel>(this, "CardBtn", async (s, cmdParams) => ...

请注意,我是如何在async之后添加"CardBtn",关键字的。请记住,lambda只是内联方法。您只是在这里声明一个方法签名,而没有几件事。

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