मुझे नफ़रत है कि मेरा पहला प्रश्न कई बार उत्तर दिया गया है, लेकिन मुझे अभी भी पृष्ठभूमि कार्यकर्ता का उपयोग करके एक विधि को कॉल करने के तरीके के बारे में अपना सिर प्राप्त करने में कठिन समय है।BackgroundWorker से कॉल विधि
मैं कक्षाओं और विधियों की एक श्रृंखला का उपयोग कर एक बहुत बड़ी टेक्स्ट फ़ाइल संसाधित कर रहा हूं। उपयोगकर्ता एक उपकरण स्ट्रिप आइटम का चयन करने के बाद पूरी प्रक्रिया को लात मार दिया जाता है। क्रमिक रूप से, यह इस प्रकार है:
- उपयोगकर्ता उपकरण पट्टी आइटम
- उपयोगकर्ता एक फ़ाइल का चयन करता है एक संवाद बॉक्स के माध्यम से संसाधित करने के लिए
- कार्रवाई
शुरू होता है मुझे लगता है कि मैं लपेट कर सकते हैं का चयन करता है उस समय से पृष्ठभूमिवर्कर में सबकुछ जो उपयोगकर्ता प्रारंभिक संवाद बॉक्स को पॉप करता है, लेकिन अब मैं जो करना चाहता हूं वह सिर्फ उस विधि को रखता है जहां सभी भारी भारोत्तोलन बैकग्राउंडवर्कर के अपने उदाहरण में किया जाता है। मैं भी प्रोग्रेसबार जोड़ूंगा, लेकिन मुझे लगता है कि अगर मैं केवल पृष्ठभूमिवर्कर प्रक्रिया रोलिंग प्राप्त कर सकता हूं तो मैं इसे संभाल सकता हूं।
ऊपर से (। स्यूडोकोड उदाहरण उद्देश्यों के लिए इस्तेमाल बहुत संक्षिप्तता के लिए छोड़े गए):
private void ToolStripMenuItem_Click(object sender, EventArgs e)
{
string fileName = openSingleFile.FileName;
processFile(fileName);
}
static public void processFile(string fileName)
{
// many vars/loops exist but not shown
foreach (data in bigData)
{
processItem(stringA, stringB); // <-- this method is where the expensive work is done
x++;
}
}
मैं BackgroundWorker का एक उदाहरण बना लिया है ...:
private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
{
// Things go here
}
... और मैंने सूची में बहुत सी चीजों की कोशिश की है, इसलिए मैं उपरोक्त प्रस्तुति के लिए शुरुआत में वापस गया हूं।
मैं BackgroundWorker समझने रहा हूँ, मैं निम्नलिखित कार्य करने होंगे:
बदलें processItem (stringA, STRING बिलियन) के साथ उपरोक्त कोड में कुछ की तरह:
backgroundWorker1.RunWorkerAsync(processItem(stringA, stringB));
... और फिर कुछ प्रकार की DoWork कॉल करें? ... और फिर कुछ प्रकार के RunWorker पूर्ण कॉल करें?
यह सुनिश्चित नहीं है कि मेरा दिमाग क्यों ठंडा हो रहा है, लेकिन मैं इस पर खर्च किए गए समय पर शर्मिंदा हूं। किसी भी तरह की सहायता का स्वागत किया जाएगा। StackOverflow के बिना, मैं बहुत समय पहले डीओए होता।
एफवाईआई: मैंने अन्य एसओ पोस्ट, एमएसडीएन, और डॉटनेट पेर्ल्स उदाहरणों का संदर्भ दिया है। मुझे बस कुछ अवधारणा याद आ रही है, मुझे लगता है।
अपनी सभी घटनाओं को बांधना न भूलें। bw.DoWork + = नया DoWorkEventHandler (bw_DoWork); bw.ProgressChanged + = नई प्रगतिChangedEventHandler (bw_ProgressChanged); bw.RunWorker पूर्ण + = नया RunWorkerCompletedEventHandler (bw_RunWorker पूर्ण); –
अच्छा सवाल। मुझे बहुत कुछ –