订阅UI Automation事件会冻结窗口挂起的应用程序

时间:2014-01-13 02:03:03

标签: c# wpf ui-automation microsoft-ui-automation

我正在使用AddPropertyChangedEventHandler根据http://msdn.microsoft.com/en-us/library/ms752286(v=vs.110).aspx

订阅窗口事件

但是,如果目标窗口挂起或冻结(不幸的是这可能会经常发生),我的整个应用程序也会挂起。

解决这个问题的最佳方法是什么?

(C#,. NET 4.5,WPF)

1 个答案:

答案 0 :(得分:2)

请参阅:

  

尝试从STA线程安装事件处理程序   死锁,因为UIA试图回调给STA线程通知它   新的事件处理程序。

根据我认为你需要订阅不同线程上的事件(即不是你的UI线程)....它应该是一个初始化为使用COM MTA(多线程公寓)线程模型....而不是在UI的STA线程上进行。

然后只有Invoke回到你的UI线程,当你在后台MTA线程上获得事件时(我建议使用BeginInvoke而不是Invoke来回调一个委托您的UI线程以避免可能的死锁。)