[英]Xamarin MessagingCenter: sending once, receiving multiples
我在使用 xamarin 消息中心時遇到了一個煩人的問題。 我添加了一些斷點,並注意到只發送了一條消息,但訂閱者收到了兩次。
我的發件人代碼(第 2 頁):
async void CompartilhaMapa(System.Object sender, System.EventArgs e)
{
...
MessagingCenter.Send<Page2, ParamType>(this, "PopUpData", new ParamType() { Tipo = 2, Valor = Coords });
Console.WriteLine("msg sent"); //displayed only once and line above has a break line assuring this
await Navigation.PopPopupAsync();
}
第1頁(訂閱者):
protected override void OnAppearing()
{
base.OnAppearing();
MessagingCenter.Subscribe<Page2, ParamType>(this, "PopUpData", async (sender, arg) =>
{
Task.WaitAll(tasks.ToArray());
switch (arg.Tipo)
{
case 2:
Console.WriteLine(" *********** msg received"); //this is outputted twice
tasks.Add(Task.Run(() => ShareMap(arg))); //this is called twice
break;
case 3: tasks.Add(Task.Run(() => ShareEvent(arg))); break;
case 6: tasks.Add(Task.Run(() => ShareImage(arg))); break;
}
});
}
protected override void OnDisappearing()
{
base.OnDisappearing();
MessagingCenter.Unsubscribe<Page2, ParamType>(this, "PopUpData");
}
我在這里做錯了什么?
這有兩個可能的原因:
原因 1 - 消息被多次發送。 由於您堅持只發送一次,所以我將忽略這一點。 我仍然建議您在CompartilhaMapa
function(發送者代碼)中放置一個斷點,以確保 function 實際上只被調用一次。
原因 2 - 您已多次訂閱該事件。 為了解決這個問題,
public Page1()
{
...
MessagingCenter.Subscribe<Page2, ParamType>(this, "PopUpData", async (sender, arg) => ...
}
~Page1()
{
...
MessagingCenter.Unsubscribe<Page2, ParamType>(this, "PopUpData")
}
我假設 Page1 是頁面的名稱,只需將其替換為實際名稱即可。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.