「這不起作用」並不是一組非常明顯的症狀。你在觀察什麼?
編輯:好的,現在你已經說過編譯器錯誤是什麼,它更容易診斷。您當前正在調用一個方法並嘗試將結果用作要執行的線程的任務。假設你實際上要作出這樣的方法調用,當線程啓動,你想是這樣的:
C#2:
Thread t1 = new Thread(delegate() { functionsActivations(3, 4000, 0, 4); });
C#3:
Thread t1 = new Thread(() => functionsActivations(3, 4000, 0, 4));
的altnerative到在所有地方有lambda表達式將是寫實用方法:
private static Action DeferFunctionActivations(int a, int b, int c, int d)
{
return() => functionsActivations(a, b, d, d);
}
然後,你可以使用:
Thread t1 = new Thread(DeferFunctionActivations(3, 4000, 0, 4));
等
對於帖子的餘下部分我假設C#3
此外,t1.start()
應該是t1.Start()
- C#是區分大小寫的。
要回答你的最後一點,t1
和t2
目前是獨立的 - 它們不會互相阻塞,除非你在他們正在運行的代碼的某個地方進行了同步。
如果你只是想t3
和t4
時t1
和t2
已經完成啓動,你可以使用Thread.Join
:
Thread t1 = new Thread(() => functionsActivations(3, 4000, 0, 4));
Thread t2 = new Thread(() => functionsActivations(3, 4000, 5, 9));
t1.Start();
t2.Start();
t1.Join();
t2.Join();
Thread t3 = new Thread(() => functionsActivations(4, 4000, 0, 4));
Thread t4 = new Thread(() => functionsActivations(4, 4000, 5, 9));
t3.Start();
t4.Start();
注意,這意味着這線程將等到t1
和t2
已經完成,太。如果這對你來說不夠好,有很多選擇,但基本上你會想要別的東西來異步等待t1和t2完成。例如,您可以綁了一個額外的線程來做到這一點:
Thread t1 = new Thread(() => functionsActivations(3, 4000, 0, 4));
Thread t2 = new Thread(() => functionsActivations(3, 4000, 5, 9));
t1.Start();
t2.Start();
Thread t3 = new Thread(() => functionsActivations(4, 4000, 0, 4));
Thread t4 = new Thread(() => functionsActivations(4, 4000, 5, 9));
Thread t5 = new Thread(() =>
{
t1.Join();
t2.Join();
t3.Start();
t4.Start();
});
t5.Start();
有點噁心,但它應該工作。
你能夠使用.NET 4.0嗎?如果是這樣的話,並行擴展框架使得這很容易。
哦,我不知道... – aharon 2010-02-12 13:14:23
Yea隊友,2/11接受不好。仔細檢查這些問題,並將那些回答您的情況的問題標記爲已接受。 – 2010-02-12 13:15:46