अगर मैं एकC# धागा विधि
public void Method(int m)
{
...
}
कैसे मैं इस विधि के लिए एक धागा बना सकते हैं है?
Thread t = new Thread((Method));
t.Start(m);
काम नहीं कर रहा है।
अगर मैं एकC# धागा विधि
public void Method(int m)
{
...
}
कैसे मैं इस विधि के लिए एक धागा बना सकते हैं है?
Thread t = new Thread((Method));
t.Start(m);
काम नहीं कर रहा है।
विधि आप बुला रहे हैं एक पैरामीटर की आवश्यकता है। आप उपयोग कर सकते हैं क्योंकि यह एक पैरामीटर और शून्य की वापसी प्रकार है निम्नलिखित
ThreadPool.QueueUserWorkItem(o => Method(m));
आप इस पद्धति का उपयोग विधि हस्ताक्षर में एक वस्तु को पूर्णांक को बदलने की जरूरत नहीं है।
अपने स्वयं के थ्रेड को मैन्युअल रूप से शुरू करने पर थ्रेडपूल का उपयोग करने के फायदे हैं। Thread vs ThreadPool
मुझे त्रुटि है: "विधि" के लिए कोई ओवरलोड नहीं है "प्रतिनिधि से मेल खाता है" सिस्टम। थ्रेडिंग। वैटकॉलबैक "। कृपया – elisa
वाईकॉलबैक में मदद करें! = प्रतीक्षा करें। अपनी वर्तनी को दोबारा जांचें। –
ठीक है ... गलती के लिए खेद है। लेकिन त्रुटि अभी भी जारी रखें। इसे हल करने के लिए कोई विचार? – elisa
प्रयास करें:
Thread t = new Thread(new ThreadStart(method));
t.Start();
ThreadStart tsd = new ThreadStart(ThreadMethod);
Thread t = new Thread(tsd);
t.Start();
थ्रेड तरीकों वापसी प्रकार निरर्थक होगा और तर्क को स्वीकार करने के साथ एक विधि की जरूरत है।
public void ThreadMethod() {.....}
एक और प्रकार, जिसमें ParameterizedThreadStart
हैParameterizedThreadStart ptsd = new ParameterizedThreadStart(ThreadParamMethod);
Thread t = new Thread(ptsd);
t.Start(yourIntegerValue);
ThreadParamMethod एक तरीका है जिसके लौट प्रकार शून्य है और प्रकार वस्तु में से एक तर्क को स्वीकार होता है। हालांकि आप ऑब्जेक्ट के रूप में किसी भी चीज को पास कर सकते हैं।
public void ThreadParamMethod(object arg) {.....}
क्या आप 'ptsd' से छुटकारा पाने और 'थ्रेड टी = नया थ्रेड (थ्रेडपैरएम विधि)' करके 'पैरामीटरेटेड थ्रेडस्टार्ट' उदाहरण को छोटा नहीं कर सकते हैं; क्या संकलक स्वचालित रूप से 'पैरामीटरेटेड थ्रेड स्टार्ट' प्रतिनिधि का निर्माण करेगा? (मैंने ईमानदारी से कोशिश नहीं की है) – Justin
विधि एक नहीं वस्तु को पूर्णांक में लेने के लिए ParameterizedThreadStart प्रतिनिधि उपयोग करने में सक्षम होने की जरूरत है।
तो एम को किसी ऑब्जेक्ट में बदलें और इसे पहले int में डालें।
आप इसे लैम्ब्डा अभिव्यक्ति का उपयोग करके कर सकते हैं। सी # कंपाइलर स्वचालित रूप से ThreadStart
दृश्यों के पीछे प्रतिनिधि बनाता है।
Thread t = new Thread(() => Method(m));
t.Start();
ध्यान दें कि अगर आप m
बाद में अपने कोड में बदलने के लिए, परिवर्तन करता है, तो यह अभी तक Method
दर्ज नहीं किया है धागा में प्रचार करेंगे। यदि यह एक समस्या है, तो आपको m
की एक प्रति बनाना चाहिए।
यह काम करता है। बहुत धन्यवाद। जस्टिन मैं आपसे पूछना चाहता हूं कि क्या मैं टी का उपयोग करता हूं। स्टार्ट का मतलब है कि हर बार जब मैं इस विधि को कॉल करना चाहता हूं तो मैं कोड चलाने में सक्षम हूं? – elisa
@elisa - नहीं, आपको प्रत्येक कॉल के लिए 'स्टार्ट' के लिए एक नया धागा बनाना होगा। प्रति [थ्रेड.स्टार्ट के प्रलेखन] (http://msdn.microsoft.com/en-us/library/a9fyxz7d.aspx): "एक बार थ्रेड समाप्त हो जाने पर, इसे प्रारंभ करने के लिए किसी अन्य कॉल के साथ पुनरारंभ नहीं किया जा सकता है।" – Justin
वास्तव में क्या हो रहा है? क्या काम नहीं कर रहा है क्या आपको एक त्रुटि संदेश मिल रहा है या यह तरीका सिर्फ काम नहीं कर रहा है? क्या आप कुछ अतिरिक्त कोड पोस्ट कर सकते हैं? –
हाँ मुझे एक त्रुटि है: विधि समूह से सिस्टम में कनवर्ट नहीं किया जा सकता है। थ्रेडिंग। पैरामीटरकृत थ्रेडस्टार्ट – elisa