Рассмотрим следующий сценарий: я запускаю свое приложение, которое во время его выполнения должно запустить другой процесс, и только после того, как второй процесс завершит внутреннюю специфическую инициализацию, мой первый процесс продолжится. Например:
...
// Process1 code does various initializations here
Process.Start("Process2.exe");
// Wait until Process2 finishes its initialization and only then continue (Process2 doesn't exit)
...
Я вижу несколько вариантов:
- Mutex - Mutex автоматически приходит на ум при рассмотрении межпроцессного общения, однако я не вижу способа заставить Process1 ждать мьютекса, который он сам сгенерировал. Я могу заставить Process2 создать мьютекс и ждать Process1 до создания Mutex (используя функцию опроса и Mutex.OpenExisting)
- AutoResetEvent. Это было бы прекрасно для этой задачи, однако, похоже, что в .NET они не могут использоваться для межпроцессного общения.
- CreateEvent. Я могу использовать P/Invoke и использовать функцию Win32 CreateEvent. Теоретически это могло бы предоставить мне все, что мне нужно. Я бы предпочел не использовать собственные функции, если это возможно.
- Использовать внешний файл. Самый простой способ - просто использовать внешний объект OS (файл, реестр и т.д.). Однако это кажется довольно взломанным.
Я был бы рад услышать ваше мнение по этому делу.
Спасибо!