Событие поднятия потока блокируется обработчиками? - PullRequest
3 голосов
/ 17 июня 2010

Я поднимаю событие из управляемого C ++, которое обрабатывается приложением C #. Обработчик события C # выполняется в том же потоке, в котором он был вызван из C ++ ??

Другими словами, вызывает ли блокирование событий для C ++ до тех пор, пока он не будет полностью обработан C #?

Ответы [ 2 ]

2 голосов
/ 17 июня 2010

Вызов обработчика событий является синхронным по умолчанию в .NET, и, поскольку ваш код является как управляемым C ++, так и C #, это все ".NET".

Если вы хотите, чтобы ваши обработчики событий работали асинхронно, вы можете просто прикрепить обработчик на стороне C #, который либо запускает другой Thread для выполнения работы, либо переводит рабочего в ThreadPool, либо вызывает другой метод для обработки работать асинхронно через Delegate, используя асинхронное программирование . Затем обработчик быстро вернется, что позволит работе C # выполняться в фоновом режиме, в то время как код MC ++ может продолжать вызывать другие прослушиватели события.

Убедитесь, что если вы действительно выполняете код, который фактически обрабатывает событие асинхронно, то код C ++ не ожидает, что обработчики изменят данные в аргументах события. Это было бы так, если бы использовалось что-то вроде CancelEventArgs .

0 голосов
/ 17 июня 2010

Да.Дополнительный текст, чтобы обойти ограничение длины:)

И мне пришлось пройти тест «Я человек»!

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