Xamarin messaging center subscribing multiple times

263 views Asked by At

I'm dealing with a page that needs to send information to another and I'm doing this through messaging center but I noticed that messages are being sent once and received 2,4,6 times... depending on how many times I opened the subscriber page. The strange is that I had added some code to avoid subscribing more than once. See the relevant part of my code:

Sender:

if (result.status == "ok")
{
    MessagingCenter.Send<ChatCompartilhar, PassaParametro>(this, "PopUpData", new PassaParametro(){ Tipo = 3, Valor = result.msg, Extra = dataFinal });
    await Navigation.PopPopupAsync();
}

Subscriber:

Page()
{
  MessagingCenter.Unsubscribe<ChatCompartilhar, PassaParametro>(this, "PopUpData");
  MessagingCenter.Subscribe<ChatCompartilhar, PassaParametro>(this, "PopUpData", async (sender, arg) =>
  {
        Task.WaitAll(tasks.ToArray());
        switch (arg.Tipo)
        {
          case 2: tasks.Add(Task.Run(() => ShareMap(arg))); break;
          case 3: tasks.Add(Task.Run(() => ShareEvent(arg))); break;
          case 6: tasks.Add(Task.Run(() => ShareImage(arg))); break;
        }
   });
}

~Page()
{
  MessagingCenter.Unsubscribe<ChatCompartilhar, PassaParametro>(this, "PopUpData");
}

I put line break on sender line and could see it's executed only once but on subscriber, line breaks shows multiple executions. What can I do to avoid that?

1

There are 1 answers

3
Dishant On BEST ANSWER

Instead of giving current reference, you can try passing the Key name.

Page()
{
  MessagingCenter.Unsubscribe<ChatCompartilhar, PassaParametro>("SomeKey", "PopUpData");
  MessagingCenter.Subscribe<ChatCompartilhar, PassaParametro>("SomeKey", "PopUpData", async (sender, arg) =>
  {
        Task.WaitAll(tasks.ToArray());
        switch (arg.Tipo)
        {
          case 2: tasks.Add(Task.Run(() => ShareMap(arg))); break;
          case 3: tasks.Add(Task.Run(() => ShareEvent(arg))); break;
          case 6: tasks.Add(Task.Run(() => ShareImage(arg))); break;
        }
   });
}

~Page()
{
  MessagingCenter.Unsubscribe<ChatCompartilhar, PassaParametro>("SomeKey", "PopUpData");
}