- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在与一个奇怪的 NullReferenceException 作斗争,它显然是从 GetNameCore() 触发的ItemAutomationPeer的功能类(class)。
异常的详细信息如下,但真正有趣的方面是它不会发生在我运行 Windows 7 的开发机器或我们测试过的其他 Windows 7 计算机上。它只发生在我的 Windows 8 Pro 测试机上。
尝试编辑 WPF DataGrid 控件中的单元格时显然会引发异常。
我一整天都在试图追踪它,但没有成功。我尝试使用 Visual Studio 远程调试该过程并逐步执行代码,但似乎没有任何用户代码触发异常。它显然是由 PresentationFramework.Dll 内的一系列事件执行的,异常只是通过 AppDomain 冒泡并最终使应用程序崩溃。
如果有人能想到可能导致这种情况的任何事情,或解决它的方法,那真的会有所帮助。
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()
最佳答案
经过与远程调试器的多次反复和几乎毫无结果的在线搜索后,我能够将问题追溯到几个错误行为 ItemAutomationPeer实例。
当我遇到这个问题时,我对 UI 自动化以及 WPF 框架如何支持它的了解为零。事实上,当 AutomationPeer 出于某种原因让我考虑 COM 互操作时,所以我追了一段时间错误的问题。如果您正在阅读本文并且不知道 UI 自动化可能正在启动 here和 here可能会让您了解 UI 自动化在 WPF 上下文中的含义。
就我而言,结果证明应用程序在 Windows 8 测试机器上崩溃但在我的开发机器(以及它已部署到的无数其他计算机)上运行良好的原因是 Windows 8 机器有一些正在运行的某种 UI 辅助功能应用程序(或其他一些 UI 自动化客户端)。一旦我在我的 Windows 7 开发机器上启动讲述人应用程序,我就能够让应用程序崩溃。
一旦我理解了根本问题,我仍然无法进一步调试以找出导致问题的确切控件,但更多在线阅读似乎指向自定义控件的大方向,因此我开始了一个消除过程以确定哪个控件自定义 WPF 控件是有罪的。我找到了两个自定义控件 - 一个扩展了 DataGrid,另一个扩展了 ListBox。
最后,我的问题的解决方案是创建扩展 ItemsControlAutomationPeer 的自定义类。基类,并通过覆盖 OnCreateAutomationPeer 将它们提供为每个有问题的自定义控件的自动化对等项。方法。
protected override AutomationPeer OnCreateAutomationPeer()
{
return new ControlSpecificCustomAutomationPeer(this);
}
public class ControlSpecificCustomAutomationPeer
: ItemsControlAutomationPeer
{
public ControlSpecificCustomAutomationPeer(ItemsControl owner)
: base(owner)
{
}
protected override string GetNameCore()
{
return ""; // return something meaningful here..
}
protected override ItemAutomationPeer CreateItemAutomationPeer(object item)
{
return new CustomDummyItemAutomationPeer(item, this);
}
}
public class CustomDummyItemAutomationPeer
: System.Windows.Automation.Peers.ItemAutomationPeer
{
public CustomDummyItemAutomationPeer(object item, ItemsControlAutomationPeer itemsControlAutomationPeer)
: base(item, itemsControlAutomationPeer)
{
}
protected override string GetNameCore()
{
if (Item == null)
return "";
return Item.ToString() ?? "";
}
protected override AutomationControlType GetAutomationControlTypeCore()
{
return System.Windows.Automation.Peers.AutomationControlType.Text;
}
protected override string GetClassNameCore()
{
return "Dummy";
}
}
关于wpf - 来自 PresentationFramework.dll 的 NullReferenceException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16245732/
为什么 System.Windows.Clipboard(PresentationCore.dll) 对System.Windows.Thickness (PresentationFramework.
当我将 WPF 应用程序部署到另一个用户的计算机时,出现以下异常: An unhandled exception of type 'System.Windows.Markup.XamlParseExc
我写的一个应用程序崩溃了,在事件查看器中我发现了以下内容: Faulting module name: PresentationFramework.ni.dll, version: 4.0.30319
下面是一个最小的例子,我不可能再减少它了。 我在 ViewModel 中创建一个实时过滤的 CollectionView,如下所示: using System.Collections.Generic;
我编写的一个应用程序崩溃了,在事件查看器中我发现了以下内容: Faulting module name: PresentationFramework.ni.dll, version: 4.0.3031
我正在尝试在 Visual Studio 2013 中加载解决方案,但我收到了这条消息: 当我单击“确定”时,它会显示另一条错误消息: Attempted re-targeting of the pr
我遇到了奇怪的编译时错误: 项目文件必须在引用列表中包含 .NET Framework 程序集“WindowsBase、PresentationCore、PresentationFramework”。
实际上很难在网上搜索类似的案例。所以我决定在这里问一下。 在我的测试项目中,我的 SUT 引用了 PresentationFramework来自 Assembly引用标签,目标框架是.NET Fram
我正在与一个奇怪的 NullReferenceException 作斗争,它显然是从 GetNameCore() 触发的ItemAutomationPeer的功能类(class)。 异常的详细信息如下
我正在开发WPF应用程序,该应用程序首先针对3.0框架。当我尝试使其在 4.0 上运行时,出现以下异常。 System.IO.FileNotFoundException was unhandled M
我想将 PresentationFramework.Aero 主题添加到我的 ResourceDictionary。ResourceDictionary 本身位于一个名为 ProjectResourc
这可能是在黑暗中尝试,但是,我将如何在 PresentationFramework.dll 的以下内部静态方法中设置断点? System.Windows.Documents.TextEditorTyp
我想编写一个快速的 WPF 应用程序,但我发现它在 Windows 7 上看起来与 Windows 10 上完全不同。所有的填充和边距都乱七八糟。我决定添加默认的 PresentationFramew
我最近完成了我使用 Windows 8 开发的第一个 WPF 应用程序。它在我的机器上运行良好。我的一个 friend 也在他的 Windows 8 机器上的 visual studio 中运行了它,
好吧,我有一个奇怪的错误...... 这很好用: private void radioButtonNormalPoint_Checked(object sender, RoutedEventArgs
应用程序无法加载任何 xaml。也不创建空窗口“var abc = new Window1();” 错误消息仍然相同: PresentationFramework.dll 中发生“System.IO.
我在 ASP.NET 应用程序中看到难以理解的编译错误。 Project file must include the .NET Framework assembly 'WindowsBase, Pre
我刚刚从 RedGate 下载了最新版本的 Reflector,但无法反编译某些核心 WPF 程序集中的类,例如 PresentationCore 和 PresentationFramework。 这
A first chance exception of type 'System.Windows.Markup.XamlParseException' occurred in Presentation
我在 C# 上使用 WPF 作为下面的代码 //My GUI Code here 当我运行应用程序时,它会抛出以下异常
我是一名优秀的程序员,十分优秀!