代码之家  ›  专栏  ›  技术社区  ›  Nicolas Dorier

在WPF中使用弹出窗口时的COMException

  •  11
  • Nicolas Dorier  · 技术社区  · 15 年前

    我有一个非常恼人的异常,它冻结了WPF抛出的应用程序,而这个弹出窗口的内容似乎包含了很多元素。 在输出窗口中,我大约看到50次这种异常。

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

    检测到ContextSwitchDeadlock 消息:CLR已无法运行 从COM上下文0x3bd0048的转换 秒。拥有线程的线程 可能是进行非泵送等待 或者处理一个很长的运行时间 无泵送窗操作 信息。这种情况普遍存在 甚至导致应用程序变得 无响应或内存使用 随着时间的推移不断积累。到 避免这个问题,所有的单 应该使用泵送等待原语 (如CoWaitForMultipleHandles)和 在长时间内定期发送消息

    我的代码中没有使用任何COM组件,是否有人已经遇到此问题?

    死锁由调试器检测到,没有任何堆栈跟踪。 COM异常堆栈跟踪为:

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

    在 错误代码,IntPtr errorInfo)

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

    当我打电话时

    popup.IsOpen = true
    
    3 回复  |  直到 13 年前
        1
  •  4
  •   Nicolas Dorier    15 年前

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

        2
  •  1
  •   Joachim Kerschbaumer    13 年前

        3
  •  1
  •   Guillaume Pinard    13 年前

    我通过卸载Wacom笔触式平板电脑并禁用平板电脑输入服务解决了这个问题。