“它不起作用”并不是一组非常明确的症状。你在观察什么?
编辑:好的,既然您已经说过编译器错误是什么,那么诊断起来就容易多了。您当前正在调用一个方法并尝试将结果用作线程执行的任务。假设你真的想在线程启动时调用该方法,你需要这样的东西:
C# 2:
Thread t1 = new Thread(delegate() { functionsActivations(3, 4000, 0, 4); });
C# 3:
Thread t1 = new Thread(() => functionsActivations(3, 4000, 0, 4));
到处都有 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 吗?如果是这样,Parallel Extensions 框架使这一切变得更加容易。