Если поток слушает событие и поток был прерван, что происходит с событием? - PullRequest
2 голосов
/ 25 октября 2011

Скажите, если поток подписался на событие и поток был прерван. Но объект все еще там. Так что же происходит с поднятым событием сейчас?

Например: скажем, я слушаю событие Process.Exited, и поток, подписавшийся на это событие, был прерван. Как CLR информирует мою заявку о событии?


Спасибо за быстрые ответы. Я понимаю, что событие будет возбуждено в потоке, в котором издатель создает событие. Я могу четко понять / проверить это, когда он исходит из моего проекта. Но что, если я подпишусь на других? Например: Process.Exited, который я не могу контролировать.


Ответ:

Когда SynchronizingObject равен Nothing, методы, которые обрабатывают событие Exited, вызываются в потоке из пула системных потоков. Для получения дополнительной информации о пулах системных потоков см. ThreadPool.

Как указал Ганс, он будет вызываться в потоке пула потоков.

Большое спасибо. Stackoverflow качается !! С Уважением, Dreamer.

Ответы [ 4 ]

3 голосов
/ 25 октября 2011

A thread не подписывается на событие. Обработчик события присоединяется к событию. * * * * * * * * * * * * * Событие Издатель должен решить, в каком потоке будут вызываться эти события.

Потоки и события почти всегда ортогональны - издатели событий обычно просто вызывают обработчики событий в любом потоке, «естественно» замечая, что произошло логическое событие (например, поток пользовательского интерфейса для события пользовательского интерфейса).

0 голосов
/ 25 октября 2011

Согласно http://msdn.microsoft.com/en-us/library/ms366768(v=vs.80).aspx, подписавшись на событие, вы пишете пользовательский код, который выполняется при вызове события (предположительно в том же потоке, где вызывается событие).Если вы хотите, чтобы ваше приложение больше не прослушивало это событие, отмените подписку на обработчик событий, как описано на связанной странице msdn.

0 голосов
/ 25 октября 2011

Вы пробовали?Подписанный объект (на который ссылается делегат события) просто остается в куче (не собирает мусор) до тех пор, пока событие не будет активно отсоединено (например, сборщиком мусора от источника события)

Правка как уже отмечали другие, событие вызывается в любом потоке, который все равно вызывает событие.

0 голосов
/ 25 октября 2011

Обработчик события вызывается из потока, который вызывает событие.Неважно, какой поток подписался на событие.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...