Xamarin.forms Xamarin Forms MessagingCenter:System.Reflection.TargetInvocationException:调用的目标已引发异常

Xamarin.forms Xamarin Forms MessagingCenter:System.Reflection.TargetInvocationException:调用的目标已引发异常,xamarin.forms,targetinvocationexception,Xamarin.forms,Targetinvocationexception,尝试通过MessagingCenter发送字符串值时出现以下异常。异常出现在弹出页面上 异常详细信息: 异常:>>System.Reflection.TargetInvocationException:调用的目标已引发异常。-->System.NullReferenceException:对象引用未设置为对象的实例。 在F:\My Projects\Xamarin\CatholicBrain移动应用程序\CatholicBrain\CatholicBrain\CatholicBrain\View

尝试通过
MessagingCenter
发送字符串值时出现以下异常。异常出现在弹出页面上

异常详细信息:

异常:>>System.Reflection.TargetInvocationException:调用的目标已引发异常。-->System.NullReferenceException:对象引用未设置为对象的实例。 在F:\My Projects\Xamarin\CatholicBrain移动应用程序\CatholicBrain\CatholicBrain\CatholicBrain\Views\BibleOrderGamePage.xaml.cs:30中的CatholicBrain.Views.BibleOrderGamePage.b_u3_0(CatholicBrain.Model.BibleOrderGameViewModel s,System.String answer)[0x00001] 位于(包装器管理为本机)System.Reflection.RuntimeMethodInfo.InternalInvoke(System.Reflection.RuntimeMethodInfo,object,object[],System.Exception&) 在System.Reflection.RuntimeMethodInfo.Invoke(System.Object obj、System.Reflection.BindingFlags invokeAttr、System.Reflection.Binder Binder、System.Object[]参数、System.Globalization.CultureInfo culture)[0x0006a]中:0 ---内部异常堆栈跟踪的结束--- 在System.Reflection.RuntimeMethodInfo.Invoke(System.Object obj、System.Reflection.BindingFlags invokeAttr、System.Reflection.Binder Binder、System.Object[]参数、System.Globalization.CultureInfo culture)[0x00086]中:0 在System.Reflection.MethodBase.Invoke(System.Object obj,System.Object[]参数)[0x00000]中:0 在D:\a\1\s\Xamarin.Forms.Core\MessagingCenter.cs:94中的Xamarin.Forms.MessagingCenter+Subscription.InvokeCallback(System.Object sender,System.Object args)[0x00064]处 在D:\a\1\s\Xamarin.Forms.Core\MessagingCenter.cs:217中的Xamarin.Forms.MessagingCenter.InnerSend(System.String消息,System.Type senderType,System.Type argType,System.Object sender,System.Object args)处[0x0006b] 在D:\a\1\s\Xamarin.Forms.Core\MessagingCenter.cs:115中的Xamarin.Forms.MessagingCenter.Xamarin.Forms.IMessagingCenter.Send[TSender,TArgs](TSender,System.String message,TArgs args)[0x00013]处 在D:\a\1\s\Xamarin.Forms.Core\MessagingCenter.cs:108中的Xamarin.Forms.messagincenter.Send[TSender,TArgs](TSender,System.String message,TArgs args)[0x00000]处 在CatholicBrain.Model.BibleOrderGameViewModel.StartBibleOrderCheck(CatholicBrain.Model.BibleOrderAnswer selectedItem,System.Collections.Generic.List`1[T]rightAnswerList)[0x00114]中的F:\My Projects\Xamarin\CatholicBrain\CatholicBrain\CatholicBrain\Model\BibleOrderGameViewModel.cs:195

MessagingCenter.Send

MessagingCenter.Send<BibleOrderGameViewModel, string>(this, "rightanswer", selectedItem.Answer);
await PopupNavigation.Instance.PopAsync();
MessagingCenter.Send(此“右应答”,选择editem.Answer);
等待PopupNavigation.Instance.PopAsync();
MessagingCenter.订阅

MessagingCenter.Subscribe<BibleOrderGameViewModel, string>(this, "rightanswer", (s, answer) =>
{
    answerLabel.Text = answer;
});
MessagingCenter.Subscribe(这是“rightanswer”,(s,answer)=>
{
answerLabel.Text=答案;
});

发送邮件时不应使用此选项,您发送的对象必须与页面分开。 您是否尝试过使用标记类而不是对象


请参阅此

发送消息时不应使用此选项,您发送的对象必须与页面分开。 您是否尝试过使用标记类而不是对象


参考此

我通过添加
MessagingCenter解决了此问题。在包含
MessagingCenter.Subscribe的同一页面上的
OnDisappearing()
中取消订阅
代码

protected override void OnDisappearing()
{
    base.OnDisappearing();
    MessagingCenter.Unsubscribe<BibleOrderGameViewModel, string>(this, "rightanswer");
}
protected override void OnDisappearing()
{
base.OnDisappearing();
取消订阅(这是“正确答案”);
}

我通过在包含
MessagingCenter.Subscribe的同一页面上的
OnDisappearing()
中添加
MessagingCenter.Unsubscribe
代码解决了这个问题

protected override void OnDisappearing()
{
    base.OnDisappearing();
    MessagingCenter.Unsubscribe<BibleOrderGameViewModel, string>(this, "rightanswer");
}
protected override void OnDisappearing()
{
base.OnDisappearing();
取消订阅(这是“正确答案”);
}

您使用消息中心的确切目的是什么?@FreakyAli我正在尝试从一个页面发送字符串值,并在另一个页面上订阅,我已经用MessagingCenter编辑了这个问题。订阅代码。你可以重写构造函数,并在初始化弹出页面时将字符串作为参数传递。@LucasZhang MSFT你能给出一个代码示例吗?我没有完全理解。你是否使用了plugin
Rg.Plugins.Popup
?你使用消息中心的具体目的是什么?@FreakyAli我正在尝试从一个页面发送字符串值,并在另一个页面上订阅,我已经用MessagingCenter编辑了这个问题。订阅代码。你可以重写构造函数,并在初始化弹出页面时将字符串作为参数传递。@LucasZhang MSFT你能给出一个代码示例吗?我没有完全理解。您是否使用插件
Rg.Plugins.Popup
?我正在尝试从一个页面发送字符串值并在另一个页面上订阅,我已使用MessagingCenter编辑了问题。订阅代码。我正在尝试从一个页面发送字符串值并在另一个页面上订阅,我已经用MessagingCenter编辑了这个问题。订阅代码。