मेरे पास पृष्ठभूमिवर्कर और एक एकल प्रोग्रेसबार है। काम करते समय, पृष्ठभूमिवर्कर एक ट्रिपल फॉर-लूप के माध्यम से चलता है और प्रोग्रेसबार में प्रगति की रिपोर्ट करता है।मैं नेस्टेड लूप (प्रगति पट्टी के लिए) में एकाधिक चर के आधार पर प्रगति की रिपोर्ट कैसे कर सकता हूं?
वर्तमान में, रिपोर्ट की जा रही प्रगति केवल बाहरी-लूप (xProgress) की है, जो काम करती है, लेकिन आसानी से नहीं चलती है। लक्ष्य प्रोग्रेसबार के लिए आंतरिक लूप के प्रगति प्रतिशत के लिए भी जिम्मेदार है, ताकि प्रोग्रेसबार अधिक आसानी से और अधिक सटीक अपडेट हो सके।
DoWork विधि:
private void bgw_DoWork(object sender, DoWorkEventArgs e)
{
int xMax, yMax, zMax;
xMax = 10;
for (int x = 1; x <= xMax; x++)
{
yMax = 5;
for (int y = 1; y <= yMax; y++)
{
zMax = new Random().Next(50, 100);
for (int z = 1; z <= zMax; z++)
{
Thread.Sleep(5); /// The process
double xProgress = (double)x/(double)xMax;
double yProgress = (double)y/(double)yMax;
double zProgress = (double)z/(double)zMax;
/// The progress calculation:
double progressCalc = xProgress;
int progress = (int)(progressCalc * pgb.Maximum);
bgw.ReportProgress(progress);
}
}
}
}
जब एक 'y-loop' 100% पर है, तो आप के बारे में' बढ़ाने के लिए 1 से x', तो आप कह सकते हैं '100% y' एक' 1% x' है, और z और y के लिए ही कर रहे हैं । तो 'वर prog = XPROG + yProg * 0.01d * xmax + zProg * 0.01d * yMax * 0.01d * xMax' (या * ऐसा ही कुछ *)। आप * हो सकता है * छोरों 'max' को' को अधिकतम-1' के बजाय 1 0 से जा रहा यह सही ढंग से गणना करने के लिए के लिए प्राप्त करने के लिए है, लेकिन मैं, यकीन नहीं है तो आप इसे जांच होनी चाहिए। – SimpleVar
दुर्भाग्य से, की स्थापना 'कि सूत्र के progressCalc' वजह से अंतिम परिणाम 1.00d, जो ProgressBar से ऊपर जाने का कारण बना पार करने के लिए। – DomTheDeveloper
मैंने आपको बताया था कि आपको इसकी जांच करनी चाहिए। क्या आप 0 से अधिकतम -1 तक जा रहे हैं? – SimpleVar