我遇到了一个很烦人的异常,它会冻结我的 WPF 应用程序,当此弹出窗口的内容具有太多元素时会抛出该异常。
在输出窗口中,我看到大约出现了50次这个异常:
System.Runtime.InteropServices.COMException
发生在 UIAutomationProvider.dll 中
然后有时在冻结后我会得到以下异常:
检测到 ContextSwitchDeadlock 消息:CLR 无法从 COM 上下文 0x3bd0048 转换到 COM 上下文 0x3bd01b8,持续时间为 60 秒。拥有目标上下文 / 公寓的线程很 可能正在等待非泵送等待或者在处理非常长 的运行操作时未泵送 Windows 消息。这种 情况通常会对性能产生负面影响,甚至可能导 致应用程序变得无响应或内存使用不断积累。 为避免这个问题,所有单线程公寓 (STA) 线 程都应该使用泵送等待原语(例如 CoWaitForMultipleHandles),并在长时间运行的操作期间定期泵送消息。
我在代码中没有使用任何 COM 组件,请问是否有人遇到过这个问题?
调试器检测到死锁并且没有任何堆栈跟踪。
COM 异常的堆栈跟踪如下:
{"事件无法调用任何订户(HRESULT 错误:0x80040201 异常)"}
at System.Runtime.InteropServices.Marshal.ThrowExceptionForHRInternal(Int32 errorCode, IntPtr errorInfo)
at MS.Internal.Automation.UiaCoreProviderApi.UiaHostProviderFromHwnd(IntPtr hwnd)
当我调用
popup.IsOpen = true