2008-11-07 2 views
3

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

 
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() 

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

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

+0

Можете ли вы добавить информацию об этапах воспроизведения? Вы ввели ключ после запуска приложения? Предварительный просмотр вашего XAML в среде IDE без ошибок? Вы добавили какие-либо InputGestures или привязки/события клавиатуры/мыши? – 2008-11-16 17:29:52

ответ

1

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

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

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

-или-

Разверните узел для категории исключений, например, Common Language времени выполнения Исключения и выберите Метательный для конкретного исключения в этой категории.

2

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

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

Красная линия непроверенные, Зеленая линия Проверено и символы настройки как ниже

alt text http://www.gangleri.net/content/binary/debugOptions1.gif alt text http://www.gangleri.net/content/binary/debugOptions2.gif

Смежные вопросы