這些總是有趣的問題來思考,當然有多種方法來解決它。
對我來說很好的一種方法是提供一個回調方法,每個線程都使用回調方法來返回結果和狀態。在下面的示例中,我使用List來跟蹤正在運行的線程並將結果放入Dictionary中。
using System; using System.Collections.Generic; 使用System.Linq的; 使用System.Text;使用System.Threading的 ;使用System.Timers的 ;
命名空間ConsoleApplication1 { 類節目 { 靜態字典threadResults =新詞典(); static int threadMax = 2;
static void Main(string[] args)
{
List<Thread> runningThreads = new List<Thread>();
for (int i = 0; i < threadMax; i++)
{
Worker worker = new Worker();
worker.Callback = new Worker.CallbackDelegate(ThreadDone);
Thread workerThread = new Thread(worker.DoSomething);
workerThread.IsBackground = true;
runningThreads.Add(workerThread);
workerThread.Start();
}
foreach (Thread thread in runningThreads) thread.Join();
}
public static void ThreadDone(int threadIdArg, object resultsArg)
{
threadResults[threadIdArg] = resultsArg;
}
}
class Worker
{
public delegate void CallbackDelegate(int threadIdArg, object resultArg);
public CallbackDelegate Callback { get; set; }
public void DoSomething()
{
// do your thing and put it into results
object results = new object();
int myThreadId = Thread.CurrentThread.ManagedThreadId;
Callback(myThreadId, results);
}
}
}
我也喜歡這個。我希望社區能幫助我找出最好的方法 – MedicineMan 2009-08-26 17:27:53
出於好奇,是否有一個原因爲什麼你選擇背景初始化?從我所看到的情況來看,現在您將擁有兩個後臺線程的開銷,而主線程處於空閒狀態並等待它們完成。 – 2009-08-26 17:30:32
@Jesse Squire:這只是一個例子。據我所知,真正的應用程序可能有N個資源,其中N> 2。主線程在執行'Join'之前可能有其他想做的事情。 – 2009-08-26 17:54:19