У меня есть приложение C # WPF, которое должно вызывать неуправляемую C ++ DLL и получать от нее простое уведомление о событии. DLL будет ожидать появления события клавиатуры, которое невозможно увидеть в .NET (VK_MEDIA_PLAY_PAUSE, пока приложение не имеет фокуса ввода), и уведомляет основное приложение. Я нашел пример использования семафоров для межпроцессной синхронизации, но это кажется излишним. Аналогично, использование именованных каналов, COM, сокетов или p / invoke кажется более чем необходимым.
В частности, я буду запускать работающий поток в приложении WPF, который будет ожидать сигнала о событии клавиатуры, а затем уведомлять основной поток пользовательского интерфейса, чтобы он что-то сделал, как только он это сделает.
Заранее спасибо.
Как только я получил указание в направлении именованных событий, решение стало ясным. На стороне C ++ CreateEvent создает именованные события. Но на стороне C # 2 типа событий, которые появляются первыми, это AutoResetEvent и ManualResetEvent, которые не принимают имена, а EventWaitHandle -. Как только я нашел этот класс, остальные встали на свои места. В моем проекте событие устанавливается на стороне C ++ в ответ на желаемое нажатие клавиши, а сторона C # ожидает событие в потоке BackgroundWorker и воздействует на него, когда оно происходит.
Других решений пока нет …