2011-03-25 77 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); 
} 
在這種情況下我怎麼能傳遞參數方法,並且還可以存在情況,其中方法1可能需要2參數,並且其中方法2可能需要3參數

。在這種情況下,如何以通用的方式構造RunMethodInSeparateThread,它將接受許多參數並傳遞給方法。請用代碼幫助我。感謝

回答

29

要運行在另一個線程一些代碼,你可以這樣做:

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

你可以接受的參數集合或字典的方法需要接受可變數量的參數。或者你可以創建單獨的方法,允許不同數量的參數。例如:

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 2011-03-25 13:25:32

+0

這是簡單的偉大工程 – Dammer15 2017-03-16 22:32:50

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 2011-03-25 13:29:40

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

啊,忘了「國家」的arg。謝謝,jgauffin。 – JohnC 2011-03-25 13:31:47

7

在.NET 4中,您RunMethodInSeparateThread方法似乎在我看來有點多餘。我只是這樣做:

Task.Factory.StartNew(() => { Method1(param1); }); 
Task.Factory.StartNew(() => { Method2(param1, param2); }); 
相關問題