【发布时间】:2011-09-16 20:05:55
【问题描述】:
我有一个在 .NET 3.5 SP1 中运行良好的项目。现在,当升级到 .NET 4.0 时,我发生了一个自动化异常。
我已经在整个项目中搜索了与自动化相关的任何内容,但与自动化无关。谷歌搜索也无助于确认这是否是一个错误。该错误仅发生在少数 PC 上,并且是随机发生的。可以完全禁用自动化,因为我认为这可能是一个 .NET 4.0 错误?
Exception Source: PresentationCore
Message: Object reference not set to an instance of an object.
Stack Trace:
at System.Windows.Automation.Peers.AutomationPeer.EnsureChildren()
at System.Windows.Automation.Peers.AutomationPeer.UpdateChildrenInternal(Int32 invalidateLimit)
at System.Windows.Automation.Peers.AutomationPeer.UpdateSubtree()
at System.Windows.Automation.Peers.AutomationPeer.UpdateSubtree()
at System.Windows.Automation.Peers.AutomationPeer.UpdatePeer(Object arg)
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.WrappedInvoke(Delegate callback, Object args, Int32 numArgs, Delegate catchHandler)
at System.Windows.Threading.DispatcherOperation.InvokeImpl()
at System.Threading.ExecutionContext.runTryCode(Object userData)
at System.Runtime.CompilerServices.RuntimeHelpers.ExecuteCodeWithGuaranteedCleanup(TryCode code, CleanupCode backoutCode, Object userData)
at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean ignoreSyncCtx)
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.WrappedInvoke(Delegate callback, Object args, Int32 numArgs, Delegate catchHandler)
at System.Windows.Threading.Dispatcher.InvokeImpl(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.Application.RunInternal(Window window)
at System.Windows.Application.Run()
【问题讨论】:
-
不知道答案,建议大家继续观察。如果问题真的是随机的,那么它可能是 .net 4.0 的错误。否则不是
-
我们遇到了同样的问题,当我删除了一些样式后就消失了。当我们确切地找出是什么部分导致它时,我会在这里写出来。
-
好的,在我们的例子中,它与日期时间选择器日历样式的情节提要动画有关。我们仍然没有调查确切的原因,但我们会在动画解决后删除它。
-
更新:原来动画可能不是确切的原因。有人在 Buttons 上添加了全局样式。结果,DateTimePicker 风格被搞砸了。他们放入的“修复”是用一大堆 xaml 代码覆盖 DateTimePicker 样式,可能是从某个网站复制的。风格非常复杂。 当我删除复杂的自定义 DateTimePicker 样式时,异常消失了。 我还删除了全局 Button 样式覆盖,这使 DateTimePicker 看起来再次正常。因此,只需删除一大堆 XAML 样式代码,我就阻止了异常。
-
顺便说一句,它仍然是一个 WPF 错误,仅供记录。只是告诉我如何避免它。
标签: .net wpf exception automation