NullReferenceException при размещении WPF в System.AddIn - PullRequest
3 голосов
/ 07 ноября 2008

Мы разрабатываем приложение WPF, которое использует платформу System.AddIn для размещения надстроек, отображающих дополнительный контент WPF. Кажется, все работает нормально, но за ночь приложение выдает следующее исключение NullReferenceException:

Message: Error : Object reference not set to an instance of an object.
StackTrace :   at System.Windows.Interop.HwndSource.CriticalTranslateAccelerator(MSG& msg, ModifierKeys modifiers)
   at System.AddIn.Pipeline.AddInHwndSourceWrapper.TranslateAccelerator(MSG msg, ModifierKeys modifiers)
   at MS.Internal.Controls.AddInHost.System.Windows.Interop.IKeyboardInputSink.TranslateAccelerator(MSG& msg, ModifierKeys modifiers)
   at System.Windows.Interop.HwndHost.OnKeyUp(KeyEventArgs e)
   at System.Windows.UIElement.OnKeyUpThunk(Object sender, KeyEventArgs e)
   at System.Windows.Input.KeyEventArgs.InvokeEventHandler(Delegate genericHandler, Object genericTarget)
   at System.Windows.RoutedEventArgs.InvokeHandler(Delegate handler, Object target)
   at System.Windows.RoutedEventHandlerInfo.InvokeHandler(Object target, RoutedEventArgs routedEventArgs)
   at System.Windows.EventRoute.InvokeHandlersImpl(Object source, RoutedEventArgs args, Boolean reRaised)
   at System.Windows.UIElement.RaiseEventImpl(RoutedEventArgs args)
   at System.Windows.UIElement.RaiseEvent(RoutedEventArgs args, Boolean trusted)
   at System.Windows.Input.InputManager.ProcessStagingArea()
   at System.Windows.Input.InputManager.ProcessInput(InputEventArgs input)
   at System.Windows.Input.InputProviderSite.ReportInput(InputReport inputReport)
   at System.Windows.Interop.HwndKeyboardInputProvider.ReportInput(IntPtr hwnd, InputMode mode, Int32 timestamp, RawKeyboardActions actions, Int32 scanCode, Boolean isExtendedKey, Boolean isSystemKey, Int32 virtualKey)
   at System.Windows.Interop.HwndKeyboardInputProvider.ProcessKeyAction(MSG& msg, Boolean& handled)
   at System.Windows.Interop.HwndSource.CriticalTranslateAccelerator(MSG& msg, ModifierKeys modifiers)
   at System.Windows.Interop.HwndSource.OnPreprocessMessage(Object param)
   at System.Windows.Threading.ExceptionWrapper.InternalRealCall(Delegate callback, Object args, Boolean isSingleParameter)
   at System.Windows.Threading.ExceptionWrapper.TryCatchWhen(Object source, Delegate callback, Object args, Boolean isSingleParameter, Delegate catchHandler)
   at System.Windows.Threading.Dispatcher.InvokeImpl(DispatcherPriority priority, TimeSpan timeout, Delegate method, Object args, Boolean isSingleParameter)
   at System.Windows.Threading.Dispatcher.Invoke(DispatcherPriority priority, Delegate method, Object arg)
   at System.Windows.Interop.HwndSource.OnPreprocessMessageThunk(MSG& msg, Boolean& handled)
   at System.Windows.Interop.HwndSource.WeakEventPreprocessMessage.OnPreprocessMessage(MSG& msg, Boolean& handled)
   at System.Windows.Interop.ThreadMessageEventHandler.Invoke(MSG& msg, Boolean& handled)
   at System.Windows.Interop.ComponentDispatcherThread.RaiseThreadMessage(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.RunInternal(Window window)
   at System.Windows.Application.Run(Window window)
   at System.Windows.Application.Run()

Как видите, ни один из наших кодов не находится в трассировке стека, поэтому мне негде что-либо исправить. У кого-нибудь есть идеи о возможных обходных путях?

Спасибо за помощь!

Ответы [ 2 ]

1 голос
/ 05 декабря 2008

В дополнение к приведенному выше ответу Стива Массинга это, вероятно, поможет отключить опцию «Просто мой код», включить опцию «Включить поддержку исходного сервера» и настроить символы отладки для взлома и отладки кода платформы,

Это проще, чем кажется, следуйте этим 3 шагам

Красная линия не отмечена, Зеленая линия отмечена, и установите символы, как показано ниже

alt text
(источник: gangleri.net )
alt text
(источник: gangleri.net )

1 голос
/ 12 ноября 2008

Я считаю, что первое, на что вам нужно обратить внимание, это изменение настроек в Visual Studio. У меня был ряд проблем с этим, и я должен был вручную сказать Visual Studio, чтобы сломать это исключение NullReferenceException. Как только вы сделаете эту настройку, IDE фактически выдаст ошибку, и вы сможете отладить свой код. Из справки VS 2008:

Чтобы прервать выполнение при возникновении исключения В меню «Отладка» выберите «Исключения».

В диалоговом окне «Исключения» выберите «Брошенный» для всей категории исключений, например, «Исключения времени выполнения на общем языке».

-или-

Разверните узел для категории исключений, например Общих исключений времени исполнения, и выберите Брошенный для конкретного исключения в этой категории.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...