"Nó không hoạt động" không phải là một tập hợp các triệu chứng rất rõ ràng. Bạn đang quan sát điều gì?
EDIT: OK, bây giờ bạn đã nói lỗi trình biên dịch là gì, dễ chẩn đoán hơn nhiều. Bạn hiện đang gọi một phương thức và cố gắng sử dụng kết quả làm nhiệm vụ cho chuỗi để thực hiện. Giả sử bạn thực muốn làm cho rằng phương thức gọi khi thread được bắt đầu, bạn muốn một cái gì đó như thế này:
C# 2:
Thread t1 = new Thread(delegate() { functionsActivations(3, 4000, 0, 4); });
C# 3:
Thread t1 = new Thread(() => functionsActivations(3, 4000, 0, 4));
Một altnerative để có biểu thức lambda ở khắp mọi nơi sẽ là viết một phương thức tiện ích:
private static Action DeferFunctionActivations(int a, int b, int c, int d)
{
return() => functionsActivations(a, b, d, d);
}
Sau đó, bạn có thể sử dụng:
Thread t1 = new Thread(DeferFunctionActivations(3, 4000, 0, 4));
, vv
Đối với phần còn lại của bài Tôi sẽ giả C# 3.
Bên cạnh đó, t1.start()
nên t1.Start()
- C# là trường hợp nhạy cảm.
Để trả lời điểm cuối cùng của bạn, t1
và t2
hiện độc lập - chúng sẽ không chặn nhau trừ khi bạn đã đồng bộ hóa ở đâu đó trong mã mà chúng đang chạy.
Nếu bạn chỉ muốn t3
và t4
để bắt đầu khi t1
và t2
đã kết thúc, bạn có thể sử dụng 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();
Lưu ý rằng đó có nghĩa là chủ đề này sẽ đợi cho đến t1
và t2
đã hoàn thành, quá. Nếu điều đó không đủ tốt cho bạn, có nhiều lựa chọn khác nhau nhưng về cơ bản bạn sẽ muốn một cái gì đó khác để chờ đợi một cách không đồng bộ cho t1 và t2 để hoàn thành. Ví dụ, bạn có thể tie lên một chủ đề phụ để làm điều đó:
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();
Hơi icky, nhưng nó phải làm việc.
Bạn có thể sử dụng .NET 4.0 không? Nếu vậy, khung công tác mở rộng song song sẽ làm cho việc này trở nên dễ dàng hơn nhiều.
oh, tôi không biết rằng ... – aharon
Yea mate, 2/11 Chấp nhận không tốt.Đi qua những câu hỏi đó và đánh dấu những câu hỏi đã trả lời tình huống của bạn như được chấp nhận. –