System. Windows .UIElement.CreateGenericRootAutomationPeer () - NullReferenceException - PullRequest
0 голосов
/ 17 июня 2020

Я случайно получаю исключение 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)

Дополнительная информация:

  1. Проект использует. NET 3.5 Профиль клиента . Невозможно выполнить обновление до. NET 4+ по устаревшим причинам.
  2. Ошибка возникает только тогда, когда одновременно открыт инструмент автоматизации. (Inspect.exe или Accessibility Insights.) Поскольку это приложение должно быть автоматизировано, мы не можем закрыть инструмент автоматизации.
  3. Попытка переопределить 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?

...