Несколько оповещений только с одной подпиской MessagingCenter
Я разрабатываю пример, в котором Messaging Center отправляет сообщения о статусе, не связанные с кодом устройства, на мои модели представлений. В этот момент я использовал предупреждающее сообщение, чтобы заметить событие, прежде чем пытаться просмотреть модели.
Для этого я использовал статический экземпляр представления в моем конструкторе приложения общего доступа (App.xaml), где в конструкторе представления я подписываю статус.
Приложение (общедоступное)
public partial class App : Application
{
#region MasterDetailPage
public static MasterDetailPage MDP;
public static NavigationPage NAV = null;
public static MainView _mainpage;
#endregion
public App ()
{
InitializeComponent();
NAV = new NavigationPage(new StarterView()) { BarBackgroundColor = Color.FromHex("701424"), BarTextColor = Color.White }; ;
MDP = new MasterDetailPage();
MDP.BackgroundColor = Xamarin.Forms.Color.FromHex("701424");
_mainpage = new MainView();
MDP.Master = _mainpage;
MDP.Detail = NAV;
MainPage = MDP;
MainPage.Title = "H2X";
}
(Просмотреть общий доступ)
public MainView ()
{
InitializeComponent ();
string a="Test";
#region MessegeCenter
MessagingCenter.Subscribe<string,string>("APP", "Message_Received", async (sender,arg) =>
{
string b = a;
a = $"{arg}";
await DisplayAlert("Atenção", a+b, "Ok");
});
#endregion
}
В код конкретной платформы (Устройство - UWP) я создаю таймер, который через некоторое время отправляет сообщения в конструкторе главной страницы.
void dispatcherTimer_Tick(object sender, object e)
{
DateTimeOffset time = DateTimeOffset.Now;
TimeSpan span = time - lastTime;
lastTime = time;
//Time since last tick should be very very close to Interval
TimerLog.Text += timesTicked + "\t time since last tick: " + span.ToString() + "\n";
timesTicked++;
if (timesTicked > timesToTick)
{
MessagingCenter.Send<string,string>("APP","Message_Received","MR");
}
}
Когда я запускаю его, открываются дважды предупреждающие сообщения с одинаковым текстом, но нет двух подписок. Тот же текст дает мне информацию, что это было из того же события отправки.
В чем проблема? Есть ли какие-либо отношения с моим статическим видом?
заранее спасибо
Гильерме
0 ответов
Рекомендуется всегда отказываться от подписки на MessagingCenter.
MessagingCenter.Unsubscribe<string, string>(this, "Message_Received");
Если MessagingCenter подписан дважды, функции будут вызываться дважды.