You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Messaging Center在页面间传递数据接收失效该如何解决?

故障原因
  • 核心问题为消息发送时机早于订阅注册时机:你当前代码的执行顺序是先调用MessagingCenter.Send发送消息,再实例化FirstPage,最后才会执行FirstPage构造函数内的MessagingCenter.Subscribe订阅逻辑。消息发送时没有任何订阅者监听Hi这个消息标识,自然无法触发回调。
  • 补充排查点:你当前代码中发送、订阅的泛型参数(发送方类型Page、消息标识Hi、传递数据类型string)是完全匹配的,这部分没有问题;如果后续调整发送方类型,需要保证收发两端的泛型签名完全一致,否则也会收不到消息。
修复方案

调整消息发送和页面初始化的顺序即可,先完成订阅注册再发送消息:

async private void isClicked(object sender, EventArgs e)
{
    // 先实例化FirstPage,内部会自动执行订阅逻辑
    var firstPage = new FirstPage();
    // 此时已有订阅者,再发送消息即可触发回调
    MessagingCenter.Send<Page, string>(this, "Hi", "Data Sent");
    // 最后执行页面跳转
    await Navigation.PushAsync(firstPage);
}
额外注意事项
  • 页面销毁时请记得取消订阅,避免内存泄漏,可以在FirstPage中添加如下逻辑:
protected override void OnDisappearing()
{
    base.OnDisappearing();
    MessagingCenter.Unsubscribe<Page, string>(this, "Hi");
}
  • 如果你的项目是.NET MAUI,MessagingCenter已经被官方标记为弃用,推荐使用CommunityToolkit.Mvvm中的WeakReferenceMessenger实现跨组件消息传递,无需手动取消订阅也不会出现内存泄漏问题。

内容的提问来源于stack exchange,提问作者Anikwenwa Tosan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 11:06:03