0

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

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

克服这个问题的最佳方法是什么?

(C#、.NET 4.5、WPF)

4

1 回答 1

2

看:

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

据此,我认为您需要订阅不同线程(即不是您的 UI 线程)上的事件......它应该是初始化为使用 COM MTA(多线程单元)线程模型的事件...... .而是在您的 UI 的 STA 线程上执行此操作。

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

于 2014-01-13T11:07:37.943 回答