2013-08-27 5 views
8

मैं हाल ही में के प्रभाव के लिए कुछ उत्पादन कोड को देखा है? सहजता से, अगर प्रक्रिया समाप्त हो गई है तो उसके अंदर कोई कोड नहीं चल रहा है।प्रक्रिया कर सकते हैं। वर्तमान प्रक्रिया के लिए क्या सही हो गया है?</p> <pre><code>if (Process.GetCurrentProcess().HasExited) { // do something } </code></pre> <p>इस कोई मतलब है:

यदि नहीं, तो यह कहने का एक अच्छा तरीका क्या होगा कि वर्तमान प्रक्रिया समाप्त हो रही है या नहीं?

यदि यह किसी भी प्रासंगिकता का हो सकता है, तो इसके लिए उपयोग का मामला पॉपिंग सम्बन्धों से बचने के लिए था जैसे कि प्रक्रिया को मारने पर ऑब्जेक्ट का निपटारा नहीं किया जाता था।

http://msdn.microsoft.com/en-US/library/system.diagnostics.process.hasexited.aspx में टिप्पणी देखें::

+0

यह मुझे बहुत समझ में आता है, आपकी समस्या क्या है? –

+2

जैसा कि मैंने कहा था, "सहजता से, अगर प्रक्रिया समाप्त हो गई है तो उसके अंदर कोई कोड नहीं चल रहा है।", इसलिए यह कोड कभी नहीं चलाएगा और व्यर्थ है। – Asik

+0

कोड किस भाग में चलाया जाता है? मेरा मतलब है बहु-थ्रेडिंग यहाँ। –

उत्तर

3

IsExited के स्रोत कोड की जांच करना यह पता चला है कि कुछ भी शानदार नहीं हो रहा है। IsExited ओएस से पूछता है कि क्या प्रक्रिया समाप्त हो गई है और निकास कोड क्या था। बस।

आउटपुट पुनर्निर्देशन का पूरा विषय लागू नहीं होता है।

आपके द्वारा वहां प्राप्त कोड हमेशा झूठे मूल्यांकन करेंगे। इसे हटाएं और यह पता लगाने के लिए कि किसने लिखा था उसे जानने के लिए किसने लिखा था। शायद एक गलतफहमी।

0

वास्तव में आप ऐसे परिदृश्य निर्माण करने में सक्षम होने लगते हैं

मानक आउटपुट अतुल्यकालिक ईवेंट हैंडलर्स पर पुनः निर्देशित किया गया है, यह संभव है कि उत्पादन प्रसंस्करण होगा जब यह संपत्ति सच हो जाती है तो पूरा नहीं हुआ है। यह सुनिश्चित करने के लिए कि एसिंक्रोनस इवेंट हैंडलिंग पूरा हो गया है, WaitForExit() अधिभार को कॉल करें जो HasExited की जांच करने से पहले कोई पैरामीटर नहीं लेता है।

+0

यह आउटपुट प्रोसेसिंग है। जब भी यह नहीं चल रहा है तब भी प्रक्रिया कोड नहीं चला सकती है। – Ryan

+5

यह * एक और * प्रक्रिया को संदर्भित करता है, न कि स्वयं का। –

+0

अच्छा बिंदु। मैं उत्सुक हूं कि अगर आप अपना आउटपुट पकड़ लेंगे तो क्या होगा? लेकिन मुझे अवश्य कहना चाहिए कि यह एक मृत अंत लगता है ... – eFloh

1

Thread.IsBackground से:

एक बार सभी अग्रभूमि एक प्रक्रिया से संबंधित धागे समाप्त कर दिया है, आम भाषा क्रम प्रक्रिया समाप्त होता है। कोई भी शेष पृष्ठभूमि धागा बंद कर दिया गया है और पूरा नहीं हुआ है।

मेरे लिए, इसका मतलब है कि प्रक्रिया समाप्त होने के बाद कोई भी थ्रेड कभी भी निष्पादित नहीं करेगा।

Process.HasExited से बयान के लिए के रूप में:

मानक आउटपुट अतुल्यकालिक ईवेंट हैंडलर्स पर पुनः निर्देशित किया गया है, यह संभव है जब इस संपत्ति सच रिटर्न उत्पादन प्रसंस्करण पूरा कर लिया है नहीं होगा। यह सुनिश्चित करने के लिए कि एसिंक्रोनस इवेंट हैंडलिंग पूरा हो गया है, WaitForExit() अधिभार को कॉल करें जो HasExited की जांच करने से पहले कोई पैरामीटर नहीं लेता है।

मुझे नहीं लगता कि यह लागू होता है, क्योंकि एसिंक घटना हैंडलर वर्तमान प्रक्रिया में धागे हैं और प्रक्रिया समाप्त होने पर उन्हें समाप्त कर दिया जाएगा। वे केवल तभी निष्पादित कर सकते हैं जब वे किसी अन्य प्रक्रिया से जुड़े होते हैं।

संबंधित मुद्दे