Сигнализация родительского процесса о том, что дочерний процесс полностью инициализирован - PullRequest
6 голосов
/ 15 ноября 2010

Я запускаю дочерний процесс, который предоставляет конечную точку 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 Ответ

4 голосов
/ 15 ноября 2010

Я бы использовал общесистемную 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.

...