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

时间:2015-11-05 14:08:20

标签: .net wpf

我们有一个混合.NET winforms和WPF的应用程序。这是一个经典的选项卡式应用程序,随着用户在选项卡中移动,工作流程也在不断发展。其中一个选项卡是托管WFP控件,基本上是一个包含控件的网格。计算机启用了触控功能,但也配有鼠标和键盘。这是一个医疗应用程序,在医院的10个特殊区域运行。

其中一个房间每天大约有一次出现此错误:

来自修补程序页面的堆栈跟踪: PresentationCore.dll!System.Windows.PresentationSource.CriticalFromVisual(System.Windows.DependencyObject v,bool enable2DTo3DTransition) PresentationFramework.dll!System.Windows.Controls.PopupControlService.OnPostProcessInput(object sender,System.Windows.Input.ProcessInputEventArgs e)

我们无法重现此错误,只会随机发生在用户身上。此外,用户只能记住错误发生时他们正在做的事情的细节。目前尚不清楚用户是否大多使用鼠标或触摸,我猜他们对鼠标更加舒适。触摸显示器具有多点触控功能,但由于其他问题,我们将其配置为仅用于单点触控。

我找到了2012年4月发布的以下修补程序,该修补程序的堆栈跟踪看起来完全相同:

KB 2486856

我也可以从这些机器上获取.NET dll,它们来自2013年4月,似乎是后来的.NET框架汇总/服务包的一部分。

我还能够在PresentationCore.CriticalFromVisual()方法中设置断点并检查堆栈跟踪。我希望的是在堆栈中的某个地方我可以看到我的代码,然后为此错误添加try / catch并可能继续。然而,堆栈跟踪完全通过MS代码并以我的Main()结束,到那时为止重试为时已晚。

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

所以我有几个选择:

  1. 也许我找到的修补程序不是实际问题,后来有一个修复程序? (2013年4月之后)
  2. 或者有一种方法可以在调用堆栈中插入代码并执行try / catch来忽略错误。
  3. 这不是MS代码中的错误,我做错了什么(??? ???)
  4. 其他选择???

0 个答案:

没有答案