क्या मैं किसी विधि में पृष्ठभूमि कार्यकर्ता को परिभाषित कर सकता हूं?पृष्ठभूमि कार्यकर्ता और कचरा संग्रह?
private void DownLoadFile(string fileLocation){
BackgroundWorker worker = new BackgroundWorker();
worker.DoWork += new DoWorkEventHandler((obj, args) => {
// Will be executed by back ground thread asynchronously.
args.Result = Download(fileLocation);
});
worker.RunWorkerCompleted += new RunWorkerCompletedEventHandler((obj, args) => {
// will be executed in the main thread.
Result r = args.Result as Result;
ReportResult(r);
});
worker.RunWorkerAsync(fileLocation);
}
प्रश्न: डाउनलोड() फ़ंक्शन एक लंबे समय फ़ाइल डाउनलोड करने के लिए लेता है, जी सी में लात और RunWorkerCompleted से पहले कार्यकर्ता वस्तु एकत्र कर सकते हैं() निष्पादित किया जाता है?
मैं एक प्रतिनिधि (एक्शन (स्ट्रिंग) का उपयोग करने की सिफारिश करता हूं) और फिर BeginInvoke को कॉल करने की सलाह दूंगा। मुझे इस कोड में BackgroundWorker की कोई आवश्यकता नहीं दिखाई दे रही है। जब भी विधि पूरी की जाती है तब भी आप एक ईवेंट संलग्न कर सकते हैं। – JDB
ऐसा करने का एक बेहतर तरीका 'QueueUserWorkItem' का उपयोग करके थ्रेड पूल कतार में जोड़ना होगा: http://msdn.microsoft.com/en-us/library/system.threading.threadpool.queueuserworkitem.aspx –
@J ... थ्रेडपूल अच्छा है, लेकिन यह सही सिंक्रनाइज़ेशन कॉन्टेक्स्ट * पर कॉलबैक * को संभालने में आसान बनाता है। टीपीएल उस अच्छी तरह से संभालती है, यद्यपि। –