gpt4 book ai didi

.net - 避免在 StyleHelper.OnBindingValueInTemplateChanged 中发生 NullReferenceException 崩溃

转载 作者:行者123 更新时间:2023-12-04 11:13:34 24 4
gpt4 key购买 nike

我的应用程序因以下堆栈跟踪而崩溃了几次:

An uncatched exception was thrown by application: System.NullReferenceException: Object reference not set to an instance of an object.
at System.Windows.StyleHelper.OnBindingValueInTemplateChanged(Object sender, BindingValueChangedEventArgs e)
at System.Windows.Data.BindingExpressionBase.ChangeValue(Object newValue, Boolean notify)
at System.Windows.Data.MultiBindingExpression.TransferValue()
at System.Windows.Data.MultiBindingExpression.Transfer()
at System.Windows.Data.MultiBindingExpression.UpdateTarget(Boolean includeInnerBindings)
at System.Windows.Data.MultiBindingExpression.AttachToContext(Boolean lastChance)
at System.Windows.Data.MultiBindingExpression.MS.Internal.Data.IDataBindEngineClient.AttachToContext(Boolean lastChance)
at MS.Internal.Data.DataBindEngine.Task.Run(Boolean lastChance)
at MS.Internal.Data.DataBindEngine.Run(Object arg)
at System.Windows.Threading.ExceptionWrapper.InternalRealCall(Delegate callback, Object args, Int32 numArgs)
at MS.Internal.Threading.ExceptionFilterHelper.TryCatchWhen(Object source, Delegate method, Object args, Int32 numArgs, Delegate catchHandler)

问题是这种情况只发生在生产环境中,而且很少发生——过去一个月大约有 2-3 次。所以我无法调试它,我只有日志。
系统导航到另一个状态后发生崩溃(我在日志中看到下一个状态 View 和 View 模型都已加载)。
堆栈跟踪不指向特定位置。

我对这个问题做了一些调查,这是我的发现:

source code StyleHelper 类中包含此方法上方的注释:“当数据触发器条件中的绑定(bind)更改其值时调用”。
在日志中写入的调用堆栈中,我看到了 MultiBindingExpression,所以我猜这个问题与 MultiDataTrigger 有关。
我们在 xamls 中使用 MultiDataTrigger 的唯一位置(与此特定状态相关)是 this style .
它还看起来(从 OnBindingValueInTemplateChanged 代码中)唯一的 null 候选者是发送者(即 BindingExpression)或此表达式的 TargetElement(因为另一个变量具有 null 检查,并且如果从调用的任何方法中发生崩溃这个方法,所以它已被写入调用堆栈)。
我真的不明白在哪种情况下这些 friend 中的两个可能是空的......

以前有没有人遇到过同样的异常(exception),并且可以建议它是如何发生的?
或者有什么建议可以避免应用程序崩溃?

最佳答案

尝试在 IMultiValueConverter 的 Convert 方法中使用 try/catch。

关于.net - 避免在 StyleHelper.OnBindingValueInTemplateChanged 中发生 NullReferenceException 崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24011504/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com