2014-01-13 2 views
0

Я использую AddPropertyChangedEventHandler подписаться на событие окна согласно http://msdn.microsoft.com/en-us/library/ms752286(v=vs.110).aspxподписавшись на события UI Automation зависает приложение на окне висят

Однако, если целевое окно зависает или замерзнет (к сожалению, это может произойти довольно регулярно), мой все приложение зависает.

Каков наилучший способ преодолеть эту проблему?

(C#, .NET 4.5, WPF)

ответ

2

См:

Попытка установить обработчик события из STA поток имеет тенденцию тупик, поскольку МАУ пытается перезвонить в поток STA, чтобы уведомить об этом новый обработчик событий.

В соответствии с этим, я считаю, что вам необходимо подписаться на события в другом потоке (то есть не на вашем потоке пользовательского интерфейса) .... это должен быть тот, который инициализирован для использования COM MTA (многопоточная квартира) threading model .... скорее, чем это делается в потоке STA вашего UI.

Тогда просто Invoke обратно в UI потоке, когда вы получаете событие на фоне MTA нити (я бы предложил использовать BeginInvoke вместо Invoke перезвонить делегатом на вашем UI потоке, чтобы избежать возможных тупиков).

Смежные вопросы