我们正在构建一个 WPF 应用程序,并看到一些随机且非常奇怪的行为,这些行为似乎源自 BCL 内部。我们正在使用以下堆栈跟踪捕获未处理的异常:
[ArgumentException],
"TimeSpan does not accept floating point Not-a-Number values."
at System.TimeSpan.Interval(Double value, Int32 scale)
at System.Windows.Threading.Dispatcher.Invoke(DispatcherPriority priority, Delegate method, Object arg)
at MS.Win32.HwndSubclass.SubclassWndProc(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam)
at MS.Win32.UnsafeNativeMethods.DispatchMessage(MSG& msg)
at System.Windows.Threading.Dispatcher.PushFrameImpl(DispatcherFrame frame)
at System.Windows.Threading.Dispatcher.PushFrame(DispatcherFrame frame)
at System.Windows.Threading.Dispatcher.Run()
at System.Windows.Application.RunDispatcher(Object ignore)
at System.Windows.Application.RunInternal(Window window)
at System.Windows.Application.Run(Window window)
现在,如果我们相信 Reflector 调用方法 (Dispatcher.Invoke) 调用
...,TimeSpan.FromSeconds(-1.0),...
这会引发 Argument 异常,因为传入的参数在 double.IsNaN 上返回 true。这显然没有任何意义,至少可以说,我们觉得这非常令人费解。
我们无法在任何较小的样本中重现此行为,因此我们正在寻找方法在我们的完整应用程序中确定此问题的原因(以及其他看似相关的 TimeSpan 异常,这些异常也会引发)。我们有很多问题希望有人可以帮助我们,因为我们在谷歌上搜索这样的事情没有运气
- 有没有人看到过这种行为或识别出这些症状
- 是什么导致了基础数学中这些看似随机的行为,我们是否以某种方式破坏了堆栈或堆?
- 我们能否以某种方式在 TimeSpan.Interval 中调试 IL(也许是 WinDbg?)并打破并检查堆栈/堆以验证值?
我们的应用程序的数据量很大,有大量数据被异步获取和大量数据绑定,但是从我们能够获得的堆栈跟踪中,我们没有看到任何确凿的证据。
只是为了澄清这个问题:是否有人以前见过所描述的行为,识别出症状或对我们如何调试情况有意见?
想法,评论,想法,建议?