2011-03-25 11 views
15

मुझे कोड का एक बहुत अच्छा टुकड़ा मिला जो अलग-अलग थ्रेड में सभी विधि चलाता है। कोड के रूप मेंअलग थ्रेड में विधि को कैसे चलाएं

private static void Method1() 
{ 
    //Method1 implementation 
} 

private static void Method2() 
{ 
    //Method2 implementation 
} 

private static void RunMethodInSeparateThread(Action action) 
{ 
    var thread = new Thread(new ThreadStart(action)); 
    thread.Start(); 
} 

static void Main(string[] args) 
{ 
    RunMethodInSeparateThread(Method1); 
    RunMethodInSeparateThread(Method2); 
} 
इस मामले मैं कैसे विधि करने के लिए पैरामीटर पास कर सकता है और यह भी वहाँ स्थिति है जहाँ Method1 2 पैरामीटर आवश्यकता हो सकती है और जहां Method2 3 पैरामीटर आवश्यकता हो सकती है हो सकता है में

इस प्रकार है। इस स्थिति में सामान्य तरीके से RunMethodInSeparateThread का निर्माण कैसे करें जो कई परम स्वीकार करेगा और विधि को पास करेगा। कृपया कोड के साथ मेरी मदद करें।

new Thread(delegate() { 
    Method1(param1, param2); 
}).Start(); 

आप या मानकों का एक संग्रह अपने तरीके मानकों के परिवर्तनशील स्वीकार करने की जरूरत है कि के लिए एक शब्दकोश को स्वीकार कर सकते हैं: धन्यवाद

उत्तर

29

एक और धागा में कुछ कोड तुम कर सकते हो चलाने के लिए। या आप अलग-अलग विधियां बना सकते हैं जो पैरामीटर की एक अलग संख्या की अनुमति देते हैं। उदाहरण के लिए:

private static void Method1() 
{ 
    //Method1 implementation 
} 

private static void Method1(int Param1) 
{ 
    //Method1 implementation 
} 

private static void Method1(int Param1, int Param2) 
{ 
    //Method1 implementation 
} 
+0

धन्यवाद महान;) – Thomas

+0

यह आसान है और महान – Dammer15

6

तो Method1 और Method2 काफी कम समय से चल रहे सबसे अच्छा तरीका यह करने के लिए कर रहे हैं एक नया धागा बनाने के लिए नहीं है। आप इसके बजाय .NET थ्रेड पूल का उपयोग कर सकते हैं, जैसे:

private static void Method1(int x) 
{ 
    //Method1 implementation 
} 

private static void Method2(int x, int y) 
{ 
    //Method2 implementation 
} 

public static void Main() 
{ 
    ThreadPool.QueueUserWorkItem(() => Method1(4)); 
    ThreadPool.QueueUserWorkItem(() => Metho2(13, 7)); 
} 
+0

संकलन नहीं होगा काम करता है। – jgauffin

2
private static void Method1(int x, int y, int c) 
{ 
    //Method1 implementation 
} 

static void Main(string[] args) 
{ 
    ThreadPool.QueueUserWorkItem(state => Method1(1,2,3)); 
} 
+0

आह, "राज्य" तर्क भूल गया। धन्यवाद, jgauffin। – JohnC

7

पर .NET 4 के साथ, अपने RunMethodInSeparateThread विधि मेरी राय में थोड़ा निरर्थक लगता है। मैं सिर्फ यह करना होगा:

Task.Factory.StartNew(() => { Method1(param1); }); 
Task.Factory.StartNew(() => { Method2(param1, param2); }); 
संबंधित मुद्दे