Я случайно получаю исключение NullReferenceException при запуске моего приложения с запущенным Средством автоматизации (например, Inspect.exe).
И трассировка стека мне мало подсказывает:
Object reference not set to an instance of an object.(System.NullReferenceException),
Innermost Exception:
at System.Windows.Automation.Peers.AutomationPeer.Initialize()
at System.Windows.Automation.Peers.AutomationPeer..ctor()
at System.Windows.Automation.Peers.UIElementAutomationPeer..ctor(UIElement owner)
at System.Windows.UIElement.CreateGenericRootAutomationPeer()
at System.Windows.Interop.HwndTarget.CriticalHandleWMGetobject(IntPtr wparam, IntPtr lparam, Visual root, IntPtr handle)
at System.Windows.Interop.HwndTarget.HandleMessage(Int32 msg, IntPtr wparam, IntPtr lparam)
at System.Windows.Interop.HwndSource.HwndTargetFilterMessage(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam, Boolean& handled)
at MS.Win32.HwndWrapper.WndProc(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam, Boolean& handled)
at MS.Win32.HwndSubclass.DispatcherCallbackOperation(Object o)
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)
Дополнительная информация:
- Проект использует. NET 3.5 Профиль клиента . Невозможно выполнить обновление до. NET 4+ по устаревшим причинам.
- Ошибка возникает только тогда, когда одновременно открыт инструмент автоматизации. (Inspect.exe или Accessibility Insights.) Поскольку это приложение должно быть автоматизировано, мы не можем закрыть инструмент автоматизации.
- Попытка переопределить Window.OnCreateAutomationPeer на:
protected override AutomationPeer OnCreateAutomationPeer()
{
return new WindowAutomationPeer(this); //new
//return null; //old
}
но возникла аналогичная ошибка:
Object reference not set to an instance of an object.(System.NullReferenceException),
Innermost Exception:
at System.Windows.Automation.Peers.AutomationPeer.Initialize()
at System.Windows.Automation.Peers.AutomationPeer..ctor()
at System.Windows.Automation.Peers.UIElementAutomationPeer..ctor(UIElement owner)
at System.Windows.Window.OnCreateAutomationPeer()
at System.Windows.UIElement.CreateAutomationPeer()
at System.Windows.Automation.Peers.UIElementAutomationPeer.CreatePeerForElement(UIElement element)
at System.Windows.Interop.HwndTarget.CriticalHandleWMGetobject(IntPtr wparam, IntPtr lparam, Visual root, IntPtr handle)
at System.Windows.Interop.HwndTarget.HandleMessage(Int32 msg, IntPtr wparam, IntPtr lparam)
at System.Windows.Interop.HwndSource.HwndTargetFilterMessage(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam, Boolean& handled)
at MS.Win32.HwndWrapper.WndProc(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam, Boolean& handled)
at MS.Win32.HwndSubclass.DispatcherCallbackOperation(Object o)
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)
Есть ли исправление, которое мы все еще можем использовать. NET 3.5?