for (do it a bunch of times)
{
while (backgroundWorker1.IsBusy && backgroundWorker2.IsBusy &&
backgroundWorker3.IsBusy && backgroundWorker4.IsBusy &&
backgroundWorker5.IsBusy)
{
System.Threading.Thread.Sleep(0001);
}
if (!backgroundWorker1.IsBusy)
{
backgroundWorker1.RunWorkerAsync();
}
else if (!backgroundWorker2.IsBusy)
{
backgroundWorker2.RunWorkerAsync();
}
else if (!backgroundWorker3.IsBusy)
{
backgroundWorker3.RunWorkerAsync();
}
else if (!backgroundWorker4.IsBusy)
{
backgroundWorker4.RunWorkerAsync();
}
else if (!backgroundWorker5.IsBusy)
{
backgroundWorker5.RunWorkerAsync();
}
}
यह पांच बार (प्रत्येक बीजी-कार्यकर्ता एक बार) चलाता है और थोड़ी देर में अटक जाता है। पृष्ठभूमिकर्मी कभी व्यस्त होने से नहीं रोकते हैं? मैं उपलब्धता की जांच कैसे करूं?पृष्ठभूमिवर्कर्स व्यस्त होने से कभी नहीं रोकते
नोट: 5 कार्यकर्ता धागे हैं, यह आश्वस्त करता है कि उनमें से कोई भी कभी भी रोका नहीं जाता है, हमेशा उन्हें कार्य सौंपा जाता है। लेकिन वे मुझे बताने की जब वे उपलब्ध हैं, मैंने सोचा था कि एक सरल उपाय होता मना ..
- [संपादित करें अनुरोध] ---
वास्तव में यह केवल एक डमी पैरामीटर किया गया था, मैं इसे हटा दिया और यह बाहर निकलने के लिए भूल गया, मैं सिर्फ इसका इस्तेमाल dowork, जो गंदा काम करता है कॉल करने के लिए:
private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
{
timeconsumingfunction(publicstring);
}
और timeconsumingfunction अंत करता है। डीबगर और लाइन प्रति लाइन चलने में इसमें कदम उठाना, यह अंत तक चला जाता है और अंतिम '}' में आता है। इसका मतलब है कि यह समाप्त होता है, है ना?
--- [संपादित करें उत्तर] ---- यह सिर्फ मुझे लगता है कि यह पृष्ठभूमि चल पाएंगे
Application.DoEvents();
के साथ लाइन
System.Threading.Thread.Sleep(0001);
की जगह काम किया, लेकिन प्राप्त नहीं उत्तर दें और IsBusy टैग अपडेट न करें।
धन्यवाद सभी, महान उत्तरों, बहुत मदद की!
यह निर्धारित करने का सबसे आसान तरीका है कि नौकरी समाप्त हो गई है, रनवॉर्कर पूर्ण घटना पर ब्रेकपॉइंट छोड़ना और कार्यक्रम चलाने देना है। यदि आप ब्रेकपॉइंट हिट करते हैं तो पृष्ठभूमि कार्यकर्ता ने नौकरी समाप्त कर दी है। – 53an