2009-09-21 46 views
11

使用彈出我有一個非常惱人的例外,其凍結我的應用程序通過WPF,時拋出這個彈出的內容似乎有太多的元素。 在輸出窗口中,我發現這個異常大約有50次。收到COMException當我在WPF

'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

我有一個類似的問題,但我不記得上下文。你能發佈相關的代碼或堆棧跟蹤嗎? – 2009-09-21 11:54:51

+0

謝謝,我更新了我的問題! – 2009-09-21 12:00:20

+1

在WPF 4.0中有可怕的bug,只是說'。 – 2011-10-07 10:00:01

回答

4

一種解決方案是使能見度=「暈倒」在彈出的內容,而不是關閉彈出窗口,但它是一個有點哈克。

+0

幹得好。謝謝。 – 2011-10-07 10:00:17

1

我遇到了同樣的問題。我想這與我的電腦附帶的啓用了多點觸控的戴爾顯示器有關。當我停止Tablet輸入服務時,ComExceptions消失。也許這對你也是一種選擇。

1

我通過卸載Wacom數筆和觸摸平板電腦和禁用Tablet輸入服務解決了這個問題。 我遇到了WPF Popups(TogglePopups,Comboboxes等)和Expanders的這個問題。

相關問題