2012-05-30 19 views
0

我越來越接近於解決這個問題,並主要張貼分享我的結果。UIAutomation(core)受到多個User32.FindWindow調用的非常負面影響

我所看到的是一對夫婦對User32.FindWindow的調用(在同一窗口中)將調用UI自動化核心方法(如FindAllBuildCache())。

有誰知道是否有正確的方法來處理您從PInvoke FindWindow調用返回的句柄?

+0

請顯示一些代碼。聽起來很像第一個不會離開遊樂場不變。他們是否以相反的順序工作?如果他們這樣做,那肯定是問題,如果他們不這可能是他們都需要清理 –

+0

不同於內核句柄(它表示像文件和共享部分和互斥體的東西,並且當進程是關閉的完成與他們),Windows句柄 - HWNDs(通常在管理IntPtr) - 不需要處置;該句柄在桌面上的所有進程之間共享,只要目標HWND存在,該句柄就是有效的。 – BrendanMcK

回答

0

BrendanMcKless,

感謝您指出了這一點。這是很好的信息。

現在我99%確定我遇到的問題是由於在AutomationClient的同時使用了UIAutomationCore。通過使用tlbimp構建步驟從Core DLL創建託管程序集來使用Core。我使用Core獲得了更好的性能,並且獲得了一個名爲IUIAutomationLegacyIAccessiblePattern的模式,它使我能夠從Infragistics Ultragrid獲取單元格內容。我昨天注意到,即使我不使用AutomationClient,我的測試在裝入程序集時立即開始遇到問題:

我在輸出窗口中看到這個,當我使用AutomationClient導入創建一個類的實例時:

Loaded UIAutomationClientsideProviders.dll 
Loaded Accessibility.dll 

的問題可能是Accessibility.dll因爲我使用IUIAutomationLegacyIAccessiblePattern,但DLL被加載UIAutomationClientsideProviders.dll的依賴反正左右....

我會更新我的如果解決方案的結果不正確(我有相當數量的重複)在我可以100%確定之前要做的事情)。


增加了一會兒後:

的問題肯定是使用UI自動化核心與管理客戶端的UI自動化的東西一起。多麼痛苦!

+0

請注意,accessibilty.dll必須是OLEACC.DLL中Active Access stuff的託管包裝。 – chrismead