Dot-Net

當我在 WPF 中使用彈出視窗時出現 COMException

  • January 5, 2012

我有一個非常煩人的異常,當這個彈出視窗的內容似乎有很多元素時,它會凍結我的 WPF 拋出的應用程序。在輸出視窗中,我看到這個異常大約是 50 倍。

UIAutomationProvider.dll 中發生“System.Runtime.InteropServices.COMException”

然後有時在凍結後我有這個異常:

檢測到 ContextSwitchDeadlock 消息:CLR 在 60 秒內無法從 COM 上下文 0x3bd0048 轉換到 COM 上下文 0x3bd01b8。擁有目標上下文/單元的執行緒很可能要麼進行非泵送等待,要麼處理非常長時間執行的操作而不泵送 Windows 消息。這種情況通常會對性能產生負面影響,甚至可能導致應用程序變得無響應或記憶體使用量隨著時間的推移不斷累積。為避免此問題,所有單執行緒單元 (STA) 執行緒都應使用泵送等待原語(例如 CoWaitForMultipleHandles)並在長時間執行的操作期間定期泵送消息。

我的程式碼中沒有使用任何 COM 組件,有人已經遇到過這個問題嗎?

死鎖被調試器檢測到並且沒有任何堆棧跟踪。COM 異常堆棧跟踪是:

{“事件無法呼叫任何訂閱者(HRESULT 異常:0x80040201)”}

在 System.Runtime.InteropServices.Marshal.ThrowExceptionForHRInternal(Int32 錯誤程式碼,IntPtr 錯誤資訊)

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

當我打電話

popup.IsOpen = true

一種解決方案是在彈出視窗的內容上設置 Visibility=“Collapsed”,而不是關閉彈出視窗,但這有點 hacky。

我遇到了同樣的問題。我猜這與連接到我的電腦的支持多點觸控的戴爾顯示器有關。當我停止平板電腦輸入服務時,ComExceptions 消失了。也許這也是你的一個選擇。

引用自:https://stackoverflow.com/questions/1454134