2012-09-16 14 views
6

मेरे पास एक बड़ी text file है जिसमें बहुत सारी डेटा हैं। मेरे आवेदन में मैं इस फ़ाइल को खोलता हूं, नियमित अभिव्यक्ति से मेल करके प्रत्येक पंक्ति को पढ़ता हूं और इसे डेटाग्रिडव्यू में प्रदर्शित करता हूं। उत्पन्न पंक्तियों की कुल संख्या लगभग 2000 (कभी-कभी और भी अधिक है, तो बहुत बड़ी)।प्रोग्रेस बार और फ़ाइल लोडिंग

तो इन सभी परिचालनों के लिए इसमें काफी समय लगता है। तो मैंने पृष्ठभूमि कोड का उपयोग करके इस कोड को दूसरे धागे में ले जाया और सब कुछ ठीक है सिवाय इसके कि मैं एक प्रगति पट्टी में लोडिंग स्थिति दिखाना चाहता हूं जहां मैं असफल रहा हूं।

मैंने फ़ाइल लंबाई प्राप्त करने के लिए FileInfo कक्षा का उपयोग किया है और फिर यह मान Progressbar.Maximum पर दिया है। सही दृष्टिकोण नहीं लगता है क्योंकि "3" पंक्तियों वाली एक परीक्षण फ़ाइल में "305" की फ़ाइल लंबाई लौटा दी गई है। मुझे समझ में नहीं आता कि मुझे इस तरह से कितना कदम अंतराल देना चाहिए।

कोड का नमूना:

++val; 
wk.ReportProgress(val); 

और उसके बाद:

FileInfo ff = new FileInfo(openFileDialog1.FileName); 
int fsize= Convert.ToInt32(ff.Length); 
int val=1; 
pgbar_load.Invoke(new MethodInvoker(delegate { pgbar_load.Maximum = fsize; })); 

और पाश में

private void bgwrkr_load_ProgressChanged(object sender, ProgressChangedEventArgs e) 
{ 
    pgbar_load.Value = e.ProgressPercentage; 
} 

तो दो बातें मैं देख रहा हूँ:

  1. प्रगति पट्टी के लिए अधिकतम मूल्य निर्धारित करना।
  2. चरण सूचकांक को सही तरीके से सेट करना।

कृपया मुझे आगे बढ़ने का एक तरीका सुझाएं।

उत्तर

6

प्रोग्रेसबार रखें। 100 पर अधिकतम। फिर अपने परिवर्तनीय डेटा को एक चर चर में ट्रैक करें। यूआई थ्रेड पर एक लूप चलाएं (आप इसे करने के लिए टाइमर का उपयोग कर सकते हैं), जो आपके पढ़ने वाले बाइट्स को चेक करके प्रगति बार प्रतिशत का मान सेट करता है। जैसे मान लें कि आप int totalRead; और int totalFileSize में अपने पढ़ने के बाइट्स को अपनी फ़ाइल का आकार रखते हैं।

myProgressBar.Value = Convert.ToInt32(Math.Ceil(100d * totalRead/totalFileSize)); 

आप इसे अपने टाइमर टिक ईवेंट हैंडलर में डाल सकते हैं। यह प्रगति पट्टी धीरे-धीरे 100% तक चलाएगा। जब फ़ाइल पढ़ी जाती है, तो टाइमर को अक्षम करें।

+0

मैं हर बार कुल पढ़ने बाइट्स कैसे पढ़ सकता हूं, मेरा मतलब है कि int कुल रीड मान? बात यह है कि मैंने पहली बार सभी फाइलें पढ़ीं और डेटा को जेनेरिक सूची में स्टोर किया। और फिर एक लूप में मैं डेटाग्रिड की प्रत्येक पंक्ति को अद्यतन करता हूं जहां मैं प्रगति दिखा रहा हूं। – Cdeez

+0

आप जो भी कर रहे हैं उसके सवाल में जोड़ा गया कोड देख सकते हैं। – Cdeez

+0

इस उत्तर में कुछ संपादन परिणाम देंगे --- 'totalRead' और' totalFilesize' 'डबल' मान होना चाहिए, क्योंकि यदि वे पूर्णांक हैं, तो परिणाम हमेशा शून्य होता है (परिणाम का एक प्रकार का कास्ट पूर्णांक) और 100 डी * 0 = 0। और इसकी 'गणित। छत(); ' – Cdeez