【问题标题】:COMException when I use a Popup in WPF当我在 WPF 中使用弹出窗口时出现 COMException
【发布时间】:2009-09-21 11:48:23
【问题描述】:

我有一个非常烦人的异常,当这个弹出窗口的内容似乎有很多元素时,它会冻结我的 WPF 抛出的应用程序。 在输出窗口中,我看到这个异常大约是 50 倍。

'System.Runtime.InteropServices.COMException' 发生在 UIAutomationProvider.dll 中

然后有时在冻结后我有这个异常:

检测到 ContextSwitchDeadlock 消息:CLR 无法 从 COM 上下文 0x3bd0048 转换 到 COM 上下文 0x3bd01b8 为 60 秒。拥有的线程 目的地环境/公寓是最 可能要么做一个非抽水等待 或处理很长时间的运行 无抽水操作 Windows 消息。这种情况一般有 负面的性能影响,并可能 甚至导致应用程序变成 无响应或内存使用 随着时间的推移不断积累。到 避免这个问题,全单 线程单元 (STA) 线程 应该使用抽水等待原语 (例如 CoWaitForMultipleHandles)和 在很长一段时间内定期发送消息 运行操作。

我的代码中没有使用任何 COM 组件,有人已经遇到过这个问题吗?

调试器检测到死锁并且没有任何堆栈跟踪。 COM 异常堆栈跟踪是:

{"一个事件无法调用任何 订阅者(例外来自 HRESULT: 0x80040201)"}

在 System.Runtime.InteropServices.Marshal.ThrowExceptionForHRInternal(Int32 errorCode, IntPtr errorInfo)

在 MS.Internal.Automation.UiaCoreProviderApi.UiaHostProviderFromHwnd(IntPtr hwnd)

当我打电话时

popup.IsOpen = true

【问题讨论】:

  • 我遇到了类似的问题,但我不记得上下文了。你能发布相关代码或堆栈跟踪吗?
  • 谢谢,我已经更新了我的问题!
  • WPF 4.0 中有一个可怕的错误,只是说'。
  • 在调试 WPF 应用程序时,我在打开组合框的下拉列表时出现此异常。我有一个小怪胎,但无法重现这个问题。我还注意到,在 COM 爆炸后,我的 Win XP Mode 虚拟应用程序窗口消失了(但显然仍在运行)。奇怪的东西。

标签: .net wpf popup


【解决方案1】:

一种解决方案是在弹出窗口的内容上设置 Visibility="Collapsed",而不是关闭弹出窗口,但这有点 hacky。

【讨论】:

    【解决方案2】:

    我遇到了同样的问题。我猜这与连接到我的计算机的支持多点触控的戴尔显示器有关。当我停止平板电脑输入服务时,ComExceptions 消失了。也许这也是你的一个选择。

    【讨论】:

      【解决方案3】:

      我通过卸载 Wacom Pen 和 Touch 数位板并禁用数位板输入服务解决了这个问题。 我在 WPF 弹出窗口(TogglePopups、Comboboxes 等)和扩展器中遇到了这个问题。

      【讨论】:

        猜你喜欢
        • 2012-07-15
        • 2016-05-10
        • 1970-01-01
        • 2013-01-11
        • 2015-05-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-12-29
        相关资源
        最近更新 更多