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