शीर्षक को दोहराने के लिए सरल प्रश्न:क्या एप्लिकेशन बंद करना सभी सक्रिय पृष्ठभूमि कार्यकर्ताओं को रोकता है?
क्या WinForms एप्लिकेशन को बंद करना सभी सक्रिय पृष्ठभूमि कार्यकर्ताओं को रोकता है?
शीर्षक को दोहराने के लिए सरल प्रश्न:क्या एप्लिकेशन बंद करना सभी सक्रिय पृष्ठभूमि कार्यकर्ताओं को रोकता है?
क्या WinForms एप्लिकेशन को बंद करना सभी सक्रिय पृष्ठभूमि कार्यकर्ताओं को रोकता है?
हां, यह करता है।
BackgroundWorker.RunWorkerAsync
बस एक आंतरिक प्रतिनिधि पर BeginInvoke
पर कॉल करता है, जो बदले में ThreadPool
पर अनुरोध करता है। चूंकि सभी ThreadPool
धागे background हैं, हां, यह समाप्त होने पर यह समाप्त हो जाएगा।
द्वारा "WinForms अनुप्रयोग को बंद" मैं मुख्य Form
उदाहरण (कि आम तौर पर एक Program
कक्षा में Application.Run
के लिए पारित किया है दृश्य द्वारा ऑटोजनरेटेड बंद करने मानते हुए हूँ:
हालांकि, ध्यान रखें कि स्टूडियो)। यदि आपके पास पृष्ठभूमि कार्यकर्ता के साथ एक बाल विंडो है, तो यह स्वचालित रूप से BackgroundWorker
को नहीं रोक पाएगी।
आवेदन निकास पर पृष्ठभूमि थ्रेड को निरस्त करने के लिए धागे को समाप्त करने के लिए अनुशंसित तरीका नहीं है, क्योंकि आपके पास कोई गारंटी नहीं है कि इसे निरस्त कर दिया जाएगा। बंद करने से पहले कार्यकर्ता को सिग्नल करना एक बेहतर तरीका होगा, इसे पूरा करने के लिए प्रतीक्षा करें, और फिर बाहर निकलें।
और जानकारी: Delegate.BeginInvoke, MSDN on Thread Pooling, Thread.IsBackground
यदि आवेदन पूरी तरह से बंद हो जाता है (जैसा कि कुछ भी बंद करने से इसे रोक रहा है) तो आपके पृष्ठभूमि कर्मचारी भी चले जाएंगे।
मुझे लगता है हाँ। चूंकि धागे प्रक्रिया से जुड़े होते हैं और यदि प्रक्रिया बंद हो जाती है तो सभी धागे समाप्त हो जाते हैं।
BackgroundWorker धागे पृष्ठभूमि धागे (ThreadPool धागे), which die when the application dies हैं।
आपके मुख्य (UI) थ्रेड के बाद निष्पादन पर एक थ्रेड चलने का एकमात्र तरीका यह है कि यदि यह एक नया थ्रेड इंस्टेंस बनाकर और IsBackground को गलत पर सेट करके स्पष्ट रूप से बनाया गया है, तो यह एकमात्र तरीका है। यदि आप नहीं करते हैं (या यदि आप थ्रेडपूल का उपयोग करते हैं जो पृष्ठभूमि धागे को बढ़ाता है - या पृष्ठभूमिवर्कर जो आंतरिक रूप से थ्रेडपूल का भी उपयोग करता है) आपका धागा पृष्ठभूमि धागा होगा और मुख्य धागा समाप्त होने पर समाप्त कर दिया जाएगा।
जब एक प्रक्रिया बंद कर दिया है, इसके सूत्र के सभी समाप्त कर दिया है:
सबसे पहले, सिर्फ इस सवाल का जवाब आसान बनाने के लिए। इसके बारे में कोई सवाल नहीं है।
सवाल है, मैं यह व्याख्या के रूप में, इस प्रकार हो जाता है:
होगा अभी भी समय से चल रहे
BackgroundWorker
उदाहरणों को बंद करने से रोक?
का उत्तर प्रश्न है: नहीं, वे नहीं करेंगे।
हाँ, यह होगा। मैंने यह सरल रूप लिखा है, और फॉर्म को बंद करने से आवेदन निकलता है:
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
this.backgroundWorker1.RunWorkerAsync();
}
private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
{
while (true)
{
Thread.Sleep(100);
}
}
}
यह एक गोलाकार उत्तर है। यदि ऐप बंद होने पर पृष्ठभूमि कार्यकर्ता स्वचालित रूप से बंद नहीं होते हैं, तो वे एप्लिकेशन को बंद होने से रोक देंगे। –