Сообщение родительскому процессу о том, что дочерний процесс полностью инициализирован
Я запускаю дочерний процесс, который предоставляет конечную точку WCF. Как я могу сообщить от дочернего процесса к родительскому процессу, что дочерний процесс полностью инициализирован и что теперь он может получить доступ к конечной точке?
Я думал об использовании семафоров для этой цели, но не могу понять, как добиться требуемого сигнала.
string pipeUri = "net.pipe://localhost/Node0";
ProcessStartInfo startInfo = new ProcessStartInfo("Node.exe", "-uri=" + pipeUri);
Process p = Process.Start(startInfo);
NetNamedPipeBinding binding = new NetNamedPipeBinding();
var channelFactory = new ChannelFactory<INodeController>(binding);
INodeController controller = channelFactory.CreateChannel(new EndpointAddress(pipeUri));
// need some form of signal here to avoid..
controller.Ping() // EndpointNotFoundException!!
1 ответ
Решение
Я бы использовал общесистемный EventWaitHandle
за это. Затем родительское приложение может ожидать, пока дочерний процесс не сообщит об этом событии.
Оба процесса создают именованное событие, а затем один ожидает его оповещения.
// I'd probably use a GUID for the system-wide name to
// ensure uniqueness. Just make sure both the parent
// and child process know the GUID.
var handle = new EventWaitHandle(
false,
EventResetMode.AutoReset,
"MySystemWideUniqueName");
Пока дочерний процесс просто сигнализирует о событии, вызывая handle.Set()
родительский процесс ожидает его установки, используя один из WaitOne
методы.