2011-03-25 31 views
15

numaralı yöntemde nasıl çalıştırılır? Her bir yöntemi ayrı bir iş parçacığında çalıştıran çok iyi bir kod parçası buldum. kod i yönteme parametre geçebileceği ve Yöntem 1 2 parametresini gerekebilir ve burada Method2 3 parametre gerekebilir durum olabilir kadar, bu durumdaAyrı iş parçacığı

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); 
} 

izler. Bu durumda RunMethodInSeparateThread bir çok param kabul edecek ve yönteme geçecek jenerik şekilde nasıl inşa edilir. lütfen bana kodla yardım et.

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

Sen parametrelerin bir koleksiyon veya parametrelerin değişken sayıda kabul etmeleri gerekmektedir senin yöntemleri için bir sözlük kabul edebileceğini: teşekkürler

cevap

29

Yapabileceğin başka bir iş parçacığı bazı kodlar çalıştırın. Ya da farklı sayıda parametreye izin veren ayrı yöntemler oluşturabilirsiniz. Örneğin: Yöntemi1 ve Method2 oldukça kısa çalıştıran Bunu yapmanın en iyi yolu ise

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

teşekkürler harika;) – Thomas

+0

Bu basit ve – Dammer15

6

yeni bir iş parçacığı oluşturmak için değildir. Bunun yerine, .NET iş parçacığı havuzunu kullanabilirsiniz:

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

derlemek olmaz iyi çalışıyor. – 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

Ahh, "durum" argümanını unut. Teşekkürler, jgauffin. – JohnC

7

de .NET 4 ile, RunMethodInSeparateThread yöntem bence biraz gereksiz gibi görünüyor. Sadece bu yapardın:

Task.Factory.StartNew(() => { Method1(param1); }); 
Task.Factory.StartNew(() => { Method2(param1, param2); }); 
İlgili konular