Как распараллелить выполнение обработчика событий в C #
=======================================================

У меня есть устройство Kinect, и я разрабатываю программу с его использованием C #.

Для управления устройством я использовал`AllFramesReady` событие для обработки информации о глубине и цвете.

Я создал обработчик событий для обработки данных с именем`EventHandler1`, Я делаю много обработки внутри этого обработчика событий.

Я хотел бы сделать еще несколько вычислений во втором обработчике событий с именем`EventHandler2`.

Можно ли запустить эти 2 обработчика событий, которые в основном представляют собой две функции параллельно, в двух разных потоках основного процесса? Если возможно, не могли бы вы дать мне пример кода для этого?

 однако вам необходимо объединить все обработчики событий в один обработчик событий перед подпиской на желаемое событие.

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

Теперь, чтобы использовать это, мы создаем класс ParallelEvent, предоставляя ему все обработчики событий, которые мы хотим запустить параллельно. Затем мы подписываемся на событие «тест» с помощью метода обработчика класса. Наконец, мы называем событие «тест» и просмотрите вывод. Рассмотрим следующий пример:

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

Наконец, вам нужно знать о других проблемах, связанных с многопоточным кодом. Любое измененное общее состояние должно быть синхронизировано и т. Д.

Немного поработав, вы могли бы адаптировать вышеуказанный класс для предоставления события, чтобы слушатели могли подписываться и отписываться по желанию. Затем в методе Handler вы извлекаете список делегатов через[Delgate.GetInvocationList](https://msdn.microsoft.com/en-us/library/system.delegate.getinvocationlist.aspx)(). После того, как у вас есть список делегатов, вы можете обрабатывать их так же, как и существующий выше метод Handler.