(讀給底部的關鍵點!)
好吧,你已經在使用匿名方法。您可以繼續使用C#2.0和使代碼稍短這樣的:
public static void ExecuteMethod1InThread(string msg)
{
Thread t = new Thread(delegate() { log(msg); });
t.IsBackground = true;
t.Start();
t.Join();
}
或者你可以使用從C#3 lambda表達式:
public static void ExecuteMethod1InThread(string msg)
{
Thread t = new Thread(() => log(msg));
t.IsBackground = true;
t.Start();
t.Join();
}
現在你可以讓這個簡單的調用不同的方法像這樣:
public static void ExecuteMethodInThread<T>(Action<T> method, T argument)
{
Thread t = new Thread(() => method(argument));
t.IsBackground = true;
t.Start();
t.Join();
}
你會再與稱之爲:
ExecuteMethodInThread(Log, "message");
ExecuteMethodInThread(DifferentMethod, 10);
(例如)。
或者,你可以改變它只是需要一個ThreadStart入手:
public static void ExecuteMethodInThread(ThreadStart action)
{
Thread t = new Thread(action);
t.IsBackground = true;
t.Start();
t.Join();
}
,並調用它像這樣:
這不是相當等同,但是,由於何時評估各種表達式。特別是,在循環中執行此操作可能會導致問題Eric Lippert describes here。
重要的一點
然而,目前你有什麼會傷害性能。你開始一個新的線程(而不是使用線程池),然後你等待線程完成。這是有效同步調用log
方法 - 如何可以幫助性能?
這是性能比使用配發更糟反射。創建一個線程來調用一個方法是一個不錯的選擇。你應該使用線程池。 – 2010-02-10 11:15:55