我有一个非常烦人的异常,它会冻结我的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
答案 0 :(得分:4)
解决方案是在弹出窗口的内容上使Visibility =“Collapsed”,而不是关闭弹出窗口,但它有点hacky。
答案 1 :(得分:1)
我遇到了同样的问题。我想这与连接到我的电脑的多点触控启用戴尔显示器有关。当我停止平板电脑输入服务时,ComExceptions消失了。也许这也是你的选择。
答案 2 :(得分:1)
我通过卸载Wacom Pen和Touch平板电脑并禁用平板电脑输入服务来解决此问题。 我在WPF Popups(TogglePopups,Comboboxes等)和Expanders中遇到过这个问题。