如何停止消息中心以停止Xamarin.Forms中的多次订阅?

时间:2019-06-13 14:14:36

标签: c# xaml xamarin xamarin.forms messagingcenter

我正在创建一个应用程序,并且当我使用MessagingCenter发送多次调用时,它需要将参数发送到另一页并使用Messagingcenter发送参数。

如果我下次使用unscribe,则下次不会收到。

This app isn't verified

我只想使用订阅发送一次,并且只发送一次。

任何人都可以调查一下并建议我该怎么做吗?

1 个答案:

答案 0 :(得分:1)

您是否只想发送和接收一次消息?然后,您可以在收到消息后使用取消订阅方法。例如,您可以这样:

 MessagingCenter.Subscribe<MyPage, string>(this, "Invoke", async (sender, 
   arg) =>
{
await Process(arg); 
MessagingCenter.Unsubscribe<MyPage>(this,"Invoke");
});

已更新

DetailPage上,您可以在方法MessagingCenter.Subscribe中调用OnAppearing(),并在方法MessagingCenter.Unsubscribe中调用OnDisappearing,如下所示:

protected override void OnAppearing()
    {
        base.OnAppearing();
       MessagingCenter.Subscribe<ListPage, string>(this, "Invoke", async (sender, arg) =>
        {
            Debug.Write("123456---->  get one msg");
            DisplayAlert("Alert", "We have received a message.", "OK");
        });
    }

    protected async override void OnDisappearing()
    {
        base.OnDisappearing();
        MessagingCenter.Unsubscribe<ListPage,string>(this, "Invoke");
    }
}

ListPage

async void OnTap (object sender, EventArgs e)  
    {
        await Navigation.PushAsync(new DetailPage());
        try
        {

            MessagingCenter.Send(this, "Invoke", "Invokedtrue");

            Debug.Write("123456---->  send one msg");

        }
        catch (Exception ex)
        {
            Debug.Write(ex);
        }

    }

注意:当您输入ListPage时,可以尝试以下代码:

  MainPage = new  NavigationPage( new ListPage());

IOS中的效果是: enter image description here

完整演示的链接为here,您可以检查它。