Мы создаем приложение WPF и видим какое-то случайное и очень странное поведение, которое, как представляется, происходит изнутри BCL. Мы ловим необработанное исключение со следующим StackTrace:TimeSpan.FromSeconds (-1.0) и double.NaN
[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)
Теперь, если мы должны верить Отражатель метод вызова (Dispatcher.Invoke) называет
...,TimeSpan.FromSeconds(-1.0),...
, который генерирует исключение Аргумент, поскольку аргумент передается в возвращает true на double.IsNaN. Это явно не имеет никакого смысла, и мы находим это очень озадачивающим, мягко говоря.
Мы не смогли воспроизвести это поведение в любых более мелких образцах, поэтому мы ищем способы определить причину этого (и другие, казалось бы, связанные с ним исключения TimeSpan, которые также выбрасываются) в нашем полном приложении. У нас есть ряд вопросов, которые они, мы надеемся, кто-то может помочь нам, так как мы не имели никакой удачи в прибегая к помощи ни за что, как этот
- ли кто-нибудь видел такое поведение или распознать симптомы
- Что вызывает эти, казалось бы, случайные поведение в базовой математике, мы как-то развращаем стек или кучу?
- Можем ли мы как-то отладить IL в TimeSpan.Interval (возможно, WinDbg?), И разбить и проверить стек/кучу, чтобы проверить значения?
Наше приложение довольно тяжелое для данных, с большим количеством данных, получаемых с помощью асинхронной передачи данных и большого количества привязки данных, но мы не видим курящего пистолета, указывающего на любой из этих трасс, которые мы смогли получить.
Просто для выяснения вопроса: кто-либо видел описанное поведение раньше, распознает симптомы или имеет информацию о том, как мы можем отлаживать ситуацию?
Мысли, комментарии, идеи, предложения?
Я бы попробовал сообщить об этом Microsoft. Похоже на довольно странное поведение. – leppie
У нас есть точно такой же симптом, такой же stacktrace. Но я не знаю, где искать. Наша программа тоже большая, и все вызовы TimeSpan.From ... выполняются с помощью int-s, который не может содержать NaN. –