2009-08-17 10 views
9

मैं एक स्ट्रिंग की रिपोर्ट कैसे कर सकता हूं (जैसे "अब खोज फ़ाइल ...", "चयन मिला ..."।) पृष्ठभूमि में वर्कर्स के साथ-साथ एक प्रतिशत से मेरी windows.form पर वापस। इसके अतिरिक्त, मेरे पास एक बड़ी कक्षा है जिसमें वह तरीका है जिसे मैं पृष्ठभूमि में चलाने के लिए चाहता हूं Worker_Work। मैं इसे class_method() द्वारा कॉल कर सकता हूं; लेकिन मैं तब पृष्ठभूमि के वर्कर_वर्क विधि से, मेरे प्रतिशत या बुलाए गए वर्ग से कुछ भी रिपोर्ट करने में असमर्थ हूं।सी # backgroundWorker रिपोर्ट स्ट्रिंग?

धन्यवाद!

उत्तर

22

मैं WCF संभालने कर रहा हूँ भी विधि

public void ReportProgress(int percentProgress, Object userState); 

तो बस स्ट्रिंग रिपोर्ट करने के लिए userState उपयोग किया है।

private void worker_DoWork(object sender, DoWorkEventArgs e) 
{ 
//report some progress 
e.ReportProgress(0,"Initiating countdown"); 

// initate the countdown. 
} 

और आप मिल जाएगा कि ProgressChanged स्थिति में वापस "की शुरुआत उलटी गिनती" स्ट्रिंग

private void worker_ProgressChanged(object sender,ProgressChangedEventArgs e) 
{ 
    statusLabel.Text = e.UserState as String; 
} 
0

एक प्रतिनिधि का उपयोग करें।

9

आप उस स्ट्रिंग्स की रिपोर्ट करने के लिए ReportProgress विधि के उपयोगकर्तास्टेट पैरामीटर का उपयोग कर सकते हैं।

यहाँ MSDN से एक उदाहरण है:

private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e) 
{ 
    // This method will run on a thread other than the UI thread. 
    // Be sure not to manipulate any Windows Forms controls created 
    // on the UI thread from this method. 
    backgroundWorker.ReportProgress(0, "Working..."); 
    Decimal lastlast = 0; 
    Decimal last = 1; 
    Decimal current; 
    if (requestedCount >= 1) 
    { AppendNumber(0); } 
    if (requestedCount >= 2) 
    { AppendNumber(1); } 
    for (int i = 2; i < requestedCount; ++i) 
    { 
     // Calculate the number. 
     checked { current = lastlast + last; } 
     // Introduce some delay to simulate a more complicated calculation. 
     System.Threading.Thread.Sleep(100); 
     AppendNumber(current); 
     backgroundWorker.ReportProgress((100 * i)/requestedCount, "Working..."); 
     // Get ready for the next iteration. 
     lastlast = last; 
     last = current; 
    } 

    backgroundWorker.ReportProgress(100, "Complete!"); 
}