Блокируют ли события в C # текущее выполнение потока? - PullRequest
5 голосов
/ 09 мая 2011

Если я запускаю событие:

var handler = OnMyEvent;

if (handler != null)
{
    handler(some_info);
}

, тогда поток выполнения будет ждать, пока все методы suscriber вернутся, чтобы продолжить выполнение после строки:

handler(some_info);

?

Или события запускаются «в другом потоке», что означает, что оно автоматически переходит на следующую строку после handler(some_info)?

Ответы [ 2 ]

10 голосов
/ 09 мая 2011

События запускаются в одном потоке, и он будет блокироваться, пока они не будут завершены.Конечно, сам код обработки событий может порождать другой поток и немедленно возвращаться, но это совсем другое дело.

Также обратите внимание, что такие события, как нажатие кнопок в настольных приложениях, таких как приложения Windows Forms, помещаются в очередь сообщений и будут запускаться по одному.то есть, если вы нажмете кнопку, а затем нажмете другую кнопку, событие второй кнопки не сработает, пока первая не будет завершена.Также форма не будет перекрашиваться и будет "не отвечать", потому что рисование формы также является событием.

2 голосов
/ 09 мая 2011

События запускаются в потоке, который их вызвал.

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