मैं उपयोगकर्ता को प्रगति पट्टी प्रदर्शित करते समय कार्यकर्ता थ्रेड पर कुछ संचालन निष्पादित करना चाहता हूं। मैं एक वर्गअज्ञात संख्या के पैरामीटर के साथ एक विधि निष्पादित करने के लिए .NET कार्रवाई का उपयोग कैसे करें?
public class ProgressBar
{
public void StartAsyncTask(Action action)
{
Task t = new Task(action);
t.start();
}
}
मुझे पता चला कि मैं निम्नलिखित तरीके से StartAsyncTask
के लिए किसी भी विधि को भेज सकते हैं बना लिया है:
ProgressBar pb = new ProgressBar();
pb.StartAsyncTask(() => DoSomething(15, "something"));
public void DoSomething(int i, string s)
{
//do something
}
सबसे पहले, मैं समझने के लिए क्या है नहीं कर पा रहे और लैम्ब्डा अभिव्यक्ति कैसा है - () =>
- अनुवादित और Action
ऑब्जेक्ट एक अज्ञात संख्या के पैरामीटर के साथ एक प्रतिनिधि को पास करता है।
मैं अपने प्रोग्रेसबार के साथ BackgroundWorker
का उपयोग करना चाहता हूं लेकिन इस मामले में मुझे कार्रवाई का आह्वान करना होगा। तो कुछ इस तरह:
void m_backgroundWorker_DoWork(object sender, DoWorkEventArgs e)
{
Action action = e.Argument as Action; //same action here passed through EventArgs
//but already in a worker thread so no need for the Task object
//and now i need to somehow invoke the action object but i don't know what the parameters are.
action.Invoke(?);
}
कैसे यह संभव पहले उदाहरण में StartAsyncTask(Action action)
विधि में पैरामीटर जानने के बिना कार्रवाई अमल करने के लिए है?
इस मामले में कार्रवाई का आह्वान करते समय मुझे पैरामीटर जानने की आवश्यकता क्यों है?
"Action
" का उपयोग करने के लिए कैसे/क्यों/कब उपयोग करें, यहां तक कि अगर मैं एमएसडीएन दस्तावेज और कुछ अन्य धागे पढ़ता हूं तो भी मुझे अस्पष्ट नहीं है। इस पर कोई भी जानकारी मेरी मदद करेगी।
आप जब यह बुला मापदंडों पता करने की जरूरत है (यह तर्क के रूप में
params object[] args
लेता है) .. अन्यथा (अगर यह संभव हो गया था पैरामीटर पास नहीं) फ़ंक्शन में कोई पैरामीटर नहीं होगा .. इसलिए अपना पहला 'पैरामीटर बनाना। कुछ' कॉल 'NullReferenceException' फेंक दें। –