दिलचस्प पोस्ट
Android सामग्री डिज़ाइन बटन शैलियाँ क्या मैं एक "व्यू" एक पायथन सूची पर बना सकता हूं? वीएस 2013 बहुत धीमा क्यों है? जावा "बिट स्थानांतरण" ट्यूटोरियल? JQuery के साथ "ऑनक्लिक" को कैसे निकालना है? प्रथम डेटाबेस के साथ एएसपी। नेट पहचान EF डेटाबेस प्रथम MVC5 एक वर्ग में कन्स्ट्रक्टर निजी बनाने का क्या उपयोग है? ImportError: नाम NUMPY_MKL आयात नहीं कर सकता MySQL बनाम MongoDB 1000 पढ़ता है jQuery और छद्म तत्व सीएसएस शैली "फ्लोट" को साफ करने का सबसे अच्छा तरीका क्या है? विम में रजिस्टर में टेक्स्ट डाले बिना हटाना एक तरीका है? jQuery: jQuery में छुपा तत्व की ऊंचाई प्राप्त करें ClearCase में, मैं एक फ़ाइल के पुराने संस्करण को एक स्थिर दृश्य में कैसे देख सकता हूँ, कमांड लाइन से? पायथन के बारे में सॉर्ट () विधि में बनाया गया है

मापदंडों के साथ थ्रेड स्टार्ट

सी # में मापदंडों के साथ एक धागा कैसे शुरू करें?

वेब के समाधान से एकत्रित समाधान "मापदंडों के साथ थ्रेड स्टार्ट"

हां :

Thread t = new Thread (new ParameterizedThreadStart(myMethod)); t.Start (myParameterObject); 

थ्रेड कन्स्ट्रक्टर के 2 ओवरलोड में से एक पैरामीटरेटेड थ्रेडस्टार्ट प्रतिनिधि को ख़ास कर देता है जो आपको प्रारंभिक विधि के लिए एक पैरामीटर पास करने की अनुमति देता है। दुर्भाग्य से, हालांकि यह केवल एक पैरामीटर की अनुमति देता है और यह एक असुरक्षित तरीके से करता है क्योंकि यह वस्तु के रूप में इसे पास करता है मुझे लगता है कि लैम्ब्डा अभिव्यक्ति का उपयोग प्रासंगिक मानदंडों को पकड़ने और उन्हें एक दृढ़तापूर्वक टाइप किए गए फैशन में पास करने में आसान है।

निम्न प्रयास करें

 public Thread StartTheThread(SomeType param1, SomeOtherType param2) { var t = new Thread(() => RealStart(param1, param2)); t.Start(); return t; } private static void RealStart(SomeType param1, SomeOtherType param2) { ... } 

आप लैम्ब्डा भाव का प्रयोग कर सकते हैं

 private void MyMethod(string param1,int param2) { //do stuff } Thread myNewThread = new Thread(() => MyMethod("param1",5)); myNewThread.Start(); 

यह अब तक का सबसे अच्छा जवाब मुझे मिल सकता है, यह तेज़ और आसान है

 Thread thread = new Thread(Work); thread.Start(Parameter); private void Work(object param) { string Parameter = (string)param; } 

पैरामीटर प्रकार एक ऑब्जेक्ट होना चाहिए।

संपादित करें:

हालांकि यह जवाब गलत नहीं है, मैं इस दृष्टिकोण के खिलाफ सिफारिश करता हूं। लैम्ब्डा अभिव्यक्ति का उपयोग करना पढ़ने के लिए बहुत आसान है और टाइप कास्टिंग की आवश्यकता नहीं है। यहां देखें: https://stackoverflow.com/a/1195915/52551

 class Program { static void Main(string[] args) { Thread t = new Thread(new ParameterizedThreadStart(ThreadMethod)); t.Start("My Parameter"); } static void ThreadMethod(object parameter) { // parameter equals to "My Parameter" } } 

इतना आसान लैम्ब्डा का उपयोग करने के लिए ..

 Thread t = new Thread(() => DoSomething("param1", "param2")); t.Start(); 

या आप ThreadStart का उपयोग करके भी delegate सकते हैं …

 ThreadStart ts = delegate { bool moreWork = DoWork("param1", "param2", "param3"); if (moreWork) { DoMoreWork("param1", "param2"); } }; new Thread(ts).Start(); 

पैरामीटरेटेडथेडस्टार्ट का उपयोग करें

ParametrizedThreadStart उपयोग करें

मुझे पारित पैरामीटर में समस्या थी मैंने फ़ंक्शन से लूप के लिए पूर्णांक पार किया और इसे प्रदर्शित किया, लेकिन यह हमेशा अलग परिणाम निकाल दिया। पैरामाट्रिज्ड थ्रेडस्टार्ट प्रतिनिधि के साथ (1,2,2,3) (1,2,3,3) (1,1,2,3) आदि।

यह सरल कोड एक आकर्षण के रूप में काम किया

 Thread thread = new Thread(Work); thread.Start(Parameter); private void Work(object param) { string Parameter = (string)param; } 

आप एक पैरामीट्रिड थ्रेडस्टार्ट प्रतिनिधि का उपयोग कर सकते हैं:

 string parameter = "Hello world!"; Thread t = new Thread(new ParameterizedThreadStart(MyMethod)); t.Start(parameter); 

ParameterizedThreadStart एक ParameterizedThreadStart लेता है। आप एक पैरामीटर भेजने के लिए, या कई गुणों वाले कस्टम क्लास का उपयोग कर सकते हैं।

एक और तरीका यह है कि जिस पद्धति को आप सेट करना चाहते हैं उन पैरामीटर के गुणों के साथ एक क्लास में इंस्टेंस सदस्य के रूप में शुरू करना चाहते हैं। कक्षा का एक उदाहरण बनाएं, गुण सेट करें और थ्रेड को उदाहरण और विधि निर्दिष्ट करें, और विधि गुणों तक पहुंच सकते हैं।

आप BackgroundWorker RunWorkerAsync विधि का उपयोग कर सकते हैं और अपने मूल्य में पास कर सकते हैं।