2013-02-13 8 views
5

के साथ विधि के साथ नया धागा बनाना मैं नया धागा बनाने और पैरामीटर के साथ एक विधि को पास करने की कोशिश कर रहा हूं, लेकिन त्रुटियां बाहर हैं।पैरामीटर

var t = new Thread(new ParameterizedThreadStart(myMethod)); 
t.Start(myGrid); 

और:

Thread t = new Thread(myMethod); 
t.Start(myGrid); 

public void myMethod(UltraGrid myGrid) 
{ 
} 

--------- त्रुटियों ------------

Error: CS1502 - line 92 (164) - The best overloaded method match for ' System.Threading.Thread.Thread(System.Threading.ThreadStart) ' has some invalid arguments

Error: CS1503 - line 92 (164) - Argument '1': cannot convert from 'method group' to ' System.Threading.ThreadStart '

+5

मुझे लगता है कि हमें अनुमान लगाया जाना चाहिए कि आपको कौन सी त्रुटि मिलती है? ** कृपया अपने प्रश्न में प्राप्त त्रुटि को शामिल करें! ** – ThiefMaster

+0

क्या आपके पास अपनी कक्षा में 'myMethod' नामक एक से अधिक विधि हैं? –

उत्तर

10

करने के लिए अपने धागा प्रारंभ बदलें इसके लिए विधि:

public void myMethod(object myGrid) 
{ 
    var grid = (UltraGrid)myGrid; 
} 

To match the ParameterizedThreadStart delegate signature

+1

'पैरामीटरेटेड थ्रेडस्टार्ट' का उपयोग करने की कोई आवश्यकता नहीं है, क्योंकि उचित प्रतिनिधि प्रकार का अनुमान लगाया जा सकता है। तो बस 'myGrid' पैरामीटर को' ऑब्जेक्ट 'में बदलना पर्याप्त है। – sloth

0
public void myMethod(object myGrid) 
    { 
     var typedParam = (UltraGrid)myGrid; 
     //... 
    } 


    Thread t = new Thread(new ParameterizedThreadStart(myMethod)); 
    t.Start(myGrid); 
+0

यह साफ है, लेकिन अगर मेरा तरीका कुछ वापस कर रहा है तो क्या होगा? कोड में मुझे क्या परिवर्तन करना चाहिए? –

18

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

Thread t = new Thread(()=>myMethod(myGrid)); 
t.Start(); 

public void myMethod(UltraGrid myGrid) 
{ 
} 

अगर आप था जैसे

public void myMethod(UltraGrid myGrid, string s) 
{ 
} 

Thread t = new Thread(()=>myMethod(myGrid, "abc")); 
t.Start(); 

http://www.albahari.com/threading/#_Passing_Data_to_a_Thread

एक विधि को पढ़ने के लिए एक महान पुस्तक Thats!

+0

धन्यवाद, मेरी मदद की। – Sak