2010-11-15 11 views
5

मैं एक बाल प्रक्रिया शुरू कर रहा हूं जो डब्लूसीएफ एंडपॉइंट का खुलासा करता है। मैं बच्चे की प्रक्रिया से मूल प्रक्रिया में कैसे संकेत कर सकता हूं कि बच्चा पूरी तरह से शुरू हुआ है और अब यह एंडपॉइंट तक पहुंच सकता है?एक मूल प्रक्रिया को सिग्नल करना कि एक बच्चे की प्रक्रिया पूरी तरह से शुरू हो गई है

मैंने इस उद्देश्य के लिए सेमफोरस का उपयोग करने के बारे में सोचा था, लेकिन यह आवश्यक नहीं है कि आवश्यक सिग्नल कैसे प्राप्त किया जाए।

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

उत्तर

3

मैं इसके लिए सिस्टम-व्यापी 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 तरीकों में से एक का उपयोग कर सेट किया जा करने के लिए इंतजार कर रहा है।