मैं एक प्रक्रिया को समाप्त करने के लिए इंतजार करना चाहता हूं, लेकिन process.WaitForExit()
मेरी जीयूआई लटकता है। क्या कोई ईवेंट-आधारित तरीका है, या क्या मुझे बाहर निकलने तक ब्लॉक करने के लिए थ्रेड को बढ़ाने की आवश्यकता है, फिर ईवेंट को स्वयं प्रतिनिधि दें?प्रक्रिया। WaitForExit() asynchronously
उत्तर
process.EnableRaisingEvents = सत्य;
process.Exited + = [eventhandler]
, ऐसा प्रतीत होता है कि आपको 'c4_process.EnableRaisingEvents = true' –
उपयोग System.Diagnostics.Process.Exited
According to this link WaitForExit() विधि जब तक जुड़े प्रक्रिया समाप्त हो जाता है वर्तमान धागा प्रतीक्षा करने के लिए प्रयोग किया जाता है। हालांकि, प्रक्रिया में एक मौजूदा घटना होती है जिसमें आप हुक कर सकते हैं।
तब यह क्या है? http://msdn.microsoft.com/en-us/library/system.diagnostics.process.exited.aspx –
सत्य नहीं है, मुझे लगता है कि उत्तर को संक्षिप्त डाउनवॉट्स को नहीं हटाया जाना चाहिए। रिकॉर्ड के लिए –
.NET 4.0 के रूप में/सी # 5, होना बेहतर होता है async पद्धति का उपयोग कर इस प्रतिनिधित्व करते हैं।
/// <summary>
/// Waits asynchronously for the process to exit.
/// </summary>
/// <param name="process">The process to wait for cancellation.</param>
/// <param name="cancellationToken">A cancellation token. If invoked, the task will return
/// immediately as canceled.</param>
/// <returns>A Task representing waiting for the process to end.</returns>
public static Task WaitForExitAsync(this Process process,
CancellationToken cancellationToken = default(CancellationToken))
{
var tcs = new TaskCompletionSource<object>();
process.EnableRaisingEvents = true;
process.Exited += (sender, args) => tcs.TrySetResult(null);
if(cancellationToken != default(CancellationToken))
cancellationToken.Register(tcs.SetCanceled);
return tcs.Task;
}
उपयोग:
public async void Test()
{
var process = new Process("processName");
process.Start();
await process.WaitForExitAsync();
//Do some fun stuff here...
}
भी सेट करना होगा धन्यवाद, यह सहायक था। एक बात यह है कि मेरे साथ प्रबलता थी, हालांकि, यह है कि 'tcs.SetResult (null)' कार्य को पहले से रद्द कर दिया गया था, तो 'अवैध ऑपरेशन अपवाद' फेंकता है, यदि कार्य रद्द होने के बाद प्रक्रिया समाप्त हो जाती है तो ऐसा हो सकता है। इसे ठीक करने के लिए, मैंने 'tcs.SetResult' को' tcs.TrySetResult' के साथ बदल दिया। –
@aj_r अच्छी टिप। धन्यवाद। मैंने अद्यतन किया। – MgSam
अगर हमारे मौजूदा हैंडलर को पंजीकृत करने से पहले प्रक्रिया बंद हो जाती है, तो हम हमेशा के लिए इंतजार कर रहे हैं। पंजीकरण शुरू करने से पहले किया जाना चाहिए ताकि StartAsync विधि लिखना अधिक आसान हो। अधिकतर कोड, लेकिन एक प्रक्रिया के साथ StartAsync नामित। वापसी लाइन से पहले स्टार्ट() बस। – MuiBienCarlota
आप @MgSam जवाब चुनते हैं, तो बारे में पता होना है, अगर आपको लगता है कि स्वचालित रूप से निर्दिष्ट विलंब के बाद रद्द कर दिया जाएगा, WaitForExitAsync
कुछ CancellationToken
के माध्यम से पारित, तो आप एक InvalidOperationException
मिल सकती है। कि सुलझाने के लिए आपको
cancellationToken.Register(tcs.SetCanceled);
cancellationToken.Register(() => { tcs.TrySetCanceled(); });
को पी.एस बदलने की जरूरत है .: समय में अपने CancellationTokenSource
निपटान के लिए मत भूलना।
वह पीएस मेरी ज़िंदगी बचाई.... – Fazi
- 1. UIImage asynchronously
- 2. रिमोट कंप्यूटर पर एक प्रक्रिया के लिए WaitForExit
- 3. प्रक्रिया के अंदर प्रक्रिया?
- 4. प्रक्रिया के बाद Process.WaitForExit का उपयोग करना आवश्यक है? किल?
- 5. प्रक्रिया।
- 6. प्रक्रिया
- 7. प्रक्रिया
- 8. प्रक्रिया
- 9. प्रक्रिया
- 10. प्रक्रिया
- 11. प्रक्रिया
- 12. प्रक्रिया। स्टार्ट() और प्रक्रिया वृक्ष
- 13. ओएस: प्रक्रिया शेड्यूलर अलग प्रक्रिया
- 14. प्रक्रिया फ़ाइल क्योंकि इसे किसी अन्य प्रक्रिया
- 15. प्रक्रिया 64-बिट प्रक्रिया की मेमोरी सीमा
- 16. प्रक्रिया के बाहर argc और argv प्रक्रिया()
- 17. प्रक्रिया क्योंकि इसे किसी अन्य प्रक्रिया
- 18. प्रक्रिया क्यों है। वर्किंगसेट> प्रक्रिया। मैक्सवर्क्सिंगसेट?
- 19. फेसबुक, भुगतान प्रक्रिया प्रक्रिया त्रुटि, कैसे करें?
- 20. प्रक्रिया। किल() बनाम प्रक्रिया। स्टार्ट ("टास्ककिल", ...)
- 21. समानांतर प्रक्रिया
- 22. Xcode: प्रक्रिया
- 23. संग्रहित प्रक्रिया
- 24. प्रक्रिया सीपीयू
- 25. जावा प्रक्रिया
- 26. हुक प्रक्रिया
- 27. बिल्ड प्रक्रिया
- 28. टीसीएल प्रक्रिया
- 29. से प्रक्रिया
- 30. पायथन प्रक्रिया
यहां एक ** पूरी तरह से async ** 'प्रक्रिया 'का कार्यान्वयन है जो आपको मानक आउटपुट और मानक त्रुटि धाराओं को पुनर्निर्देशित करने देता है http://stackoverflow.com/a/39872058/1212017। –