在WPF中使用Popup时出现COMException

Nic*_*ier 11 .net wpf popup

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

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

然后有时在冻结后我有这个例外:

检测到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
Run Code Online (Sandbox Code Playgroud)

Nic*_*ier 4

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