2010-11-15 16 views
5

Bir WCF uç noktasını ortaya çıkaran bir alt işlemi başlatıyorum. Çocuğun tamamen başlatılmış olduğu ve şimdi son noktaya erişebileceği ana süreçten çocuk sürecine nasıl sinyal verebilirim?Alt işlemin bir alt işlemin tamamen başlatıldığını bildirme

Semaphores'i bu amaçla kullanmayı düşündüm, ancak gerekli sinyali nasıl elde edeceğimi tam olarak anlayamıyorum.

 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!! 

cevap

3

Bir sistem genelinde bunun için EventWaitHandle kullanırsınız. Ana uygulama, daha sonra çocuk sürecinin bu olayı işaret etmesini bekleyebilir.

Her iki işlem de adlandırılmış olayı oluşturur ve daha sonra bunun sinyal vermesini bekler. o WaitOne yöntemden birini kullanarak ayarlanması için alt süreç sadece handle.Set() arayarak olaya ilişkin sinyal olsa

// 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"); 

, üst süreç bekler.

İlgili konular