Walczę z dziwnym wyjątkiem NullReferenceException, który najwyraźniej został wywołany z funkcji GetNameCore() klasy ItemAutomationPeer.Wyjątek NullReferenceException od PresentationFramework.dll
Szczegóły wyjątku są poniżej, ale naprawdę intrygującym aspektem jest to, że nie występuje on na mojej maszynie programistycznej z systemem Windows 7 lub innymi komputerami z systemem Windows 7, z którymi testowaliśmy. Dzieje się tak tylko na moim komputerze testowym z systemem Windows 8 Pro.
Wyjątek jest generowany najwyraźniej podczas próby edycji komórki w formancie DataFrid WPF.
Próbowałem go wyśledzić przez cały dzień bez powodzenia. Próbowałem zdalnie debugowanie procesu przy użyciu programu Visual Studio i przechodzenie przez kod, ale żaden z kodów użytkownika nie uruchamia wyjątku. Jest to oczywiście wykonywane przez sekwencję zdarzeń wewnątrz PresentationFramework.Dll, a wyjątek po prostu przelewa się przez AppDomain i ostatecznie powoduje awarię aplikacji.
Jeśli ktokolwiek może wymyślić coś, co może być przyczyną tego lub sposób, aby to naprawić, to naprawdę pomoże.
Exception Type: System.NullReferenceException
Exception Message: Object reference not set to an instance of an object.
Method Information: System.String GetNameCore()
Exception Source: PresentationFramework
Stack Trace
at System.Windows.Automation.Peers.ItemAutomationPeer.GetNameCore()
at System.Windows.Automation.Peers.AutomationPeer.UpdateSubtree()
at System.Windows.Automation.Peers.AutomationPeer.UpdateSubtree()
at System.Windows.Automation.Peers.AutomationPeer.UpdateSubtree()
at System.Windows.ContextLayoutManager.fireAutomationEvents()
at System.Windows.ContextLayoutManager.UpdateLayout()
at System.Windows.ContextLayoutManager.UpdateLayoutCallback(Object arg)
at System.Windows.Media.MediaContext.InvokeOnRenderCallback.DoWork()
at System.Windows.Media.MediaContext.FireInvokeOnRenderCallbacks()
at System.Windows.Media.MediaContext.RenderMessageHandlerCore(Object resizedCompositionTarget)
at System.Windows.Media.MediaContext.AnimatedRenderMessageHandler(Object resizedCompositionTarget)
at System.Windows.Threading.ExceptionWrapper.InternalRealCall(Delegate callback, Object args, Int32 numArgs)
at MS.Internal.Threading.ExceptionFilterHelper.TryCatchWhen(Object source, Delegate method, Object args, Int32 numArgs, Delegate catchHandler)
at System.Windows.Threading.DispatcherOperation.InvokeImpl()
at System.Windows.Threading.DispatcherOperation.InvokeInSecurityContext(Object state)
at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
at System.Windows.Threading.DispatcherOperation.Invoke()
at System.Windows.Threading.Dispatcher.ProcessQueue()
at System.Windows.Threading.Dispatcher.WndProcHook(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, Int32 numArgs)
at MS.Internal.Threading.ExceptionFilterHelper.TryCatchWhen(Object source, Delegate method, Object args, Int32 numArgs, Delegate catchHandler)
at System.Windows.Threading.Dispatcher.LegacyInvokeImpl(DispatcherPriority priority, TimeSpan timeout, Delegate method, Object args, Int32 numArgs)
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)
at System.Windows.Application.Run()
kiedy mówisz to występuje na Windows 8 komputerze testowym był app zbudowany na tej samej maszynie lub na zasadzie Maszyna Windows-8? czy był zbudowany na W7 i właśnie wykonany z Windows-8?Sądzę, że było sporo nieporozumień między bibliotekami dll między 2 OS i potrzebowałem pewnych odwołań do skopiowania lokalnie, ponieważ działa on na Windows-8, gdy jest zbudowany z maszyny W7. Spróbuj zbudować go z Windows-8 i sprawdź, czy problem nadal występuje. Możesz zobaczyć błąd kompilacji lub uzyskać detale innerException po wykonaniu tej czynności, co może wskazywać, która biblioteka DLL powoduje niezgodność (coś podobnego do Aero wobec Aero2 i tak dalej). – Viv
To interesujący pomysł. Nie mam komputera z Windows 8 z VS, więc nie mogę przetestować tej hipotezy już teraz. Jednak możesz być na czymś, co dotyczy nieco innych ram. –