.NET 3.0 WPF错误:CriticalFromVisual()值不能为null参数名称:v

.NET 3.0 WPF错误:CriticalFromVisual()值不能为null参数名称:v,.net,wpf,.net,Wpf,我们有一个混合了.NET winforms和WPF的应用程序。这是一款经典的选项卡式应用程序,随着用户在选项卡中移动,工作流程也在不断推进。其中一个选项卡承载WFP控件,基本上是一个包含控件的网格。这台电脑是触摸式的,但也有一个鼠标和键盘。这是一个医疗应用程序,在医院的10个特殊区域运行 大约每天一次,在其中一个房间中会出现以下错误: 来自修补程序页面的堆栈跟踪: PresentationCore.dll!System.Windows.PresentationSource.CriticalFro

我们有一个混合了.NET winforms和WPF的应用程序。这是一款经典的选项卡式应用程序,随着用户在选项卡中移动,工作流程也在不断推进。其中一个选项卡承载WFP控件,基本上是一个包含控件的网格。这台电脑是触摸式的,但也有一个鼠标和键盘。这是一个医疗应用程序,在医院的10个特殊区域运行

大约每天一次,在其中一个房间中会出现以下错误:

来自修补程序页面的堆栈跟踪: PresentationCore.dll!System.Windows.PresentationSource.CriticalFromVisual(System.Windows.DependencyObject v,布尔启用2到3转换) PresentationFramework.dll!System.Windows.Controls.PopupControlService.OnPostProcessInput(对象发送者,System.Windows.Input.ProcessInputEventArgs e)

我们无法重现这个错误,它只会随机发生在用户身上。此外,用户只能记住错误发生时他们正在做什么的小细节。目前还不清楚用户主要使用鼠标还是触摸屏,我猜他们更喜欢鼠标。触摸显示器具有多点触摸功能,但由于其他问题,我们仅将其配置为单点触摸

我找到了以下2012年4月的修补程序,其堆栈跟踪似乎相同:

我还能够从这些机器上获得.NET DLL,它们是从2013年4月开始的,似乎是稍后的.NET framework汇总/service pack的一部分

我还能够在PresentationCore.CriticalFromVisual()方法内设置断点并检查堆栈跟踪。我希望在堆栈中的某个地方可以看到我的代码,然后为这个错误添加try/catch并可能继续。但是,堆栈跟踪会完全遍历MS代码,并以in my Main()结束,此时重试已经太迟了

我反编译了4.0文件并处理了调用堆栈,即检索参数“v”的位置(PresentationFramework.dll--PopupControlService.OnPostProcessInput)有一个空检查,如果为空,代码返回。我能找到的任何3.0代码中都没有这种逻辑。我的开发机器从2015年7月起有3.0个DLL,这些DLL也不包含空检查

所以我有几个选择:

  • 也许我发现的热修复程序不是真正的问题,还有后续的修复程序?(2013年4月后)
  • 或者有一种方法可以在调用堆栈中插入代码,然后执行try/catch忽略错误
  • 这不是MS代码中的错误,我做错了什么(什么??)
  • 其他选择

  • 你对此有过决定吗?由于某种原因,我在xaml设计器中遇到了错误。代码运行良好。问题越来越少。我的猜测是,用户正在做一些稍微“偏离中心”的事情,这导致了这个深bug的出现。随着时间的推移,用户在使用该应用程序时变得更加流畅,因此现在这种错误非常罕见。如果可以升级到.NET 4.5或更高版本,则不应看到此问题。有一个特定的空检查可以防止此错误。您是否对此获得了解决方案?由于某种原因,我在xaml设计器中遇到了错误。代码运行良好。问题越来越少。我的猜测是,用户正在做一些稍微“偏离中心”的事情,这导致了这个深bug的出现。随着时间的推移,用户在使用该应用程序时变得更加流畅,因此现在这种错误非常罕见。如果可以升级到.NET 4.5或更高版本,则不应看到此问题。有一个特定的空检查可以防止此错误。