Tôi đang viết một chương trình Visual C# thực hiện một vòng lặp liên tục của các hoạt động trên một chủ đề thứ cấp. Thỉnh thoảng khi chủ đề đó kết thúc một tác vụ tôi muốn nó kích hoạt một eventhandler. Chương trình của tôi thực hiện điều đó nhưng khi trình xử lý sự kiện được kích hoạt, luồng thứ hai chờ cho đến khi trình xử lý sự kiện kết thúc trước khi tiếp tục luồng. Làm thế nào để tôi tiếp tục? Đây là cách tôi hiện đang có cấu trúc ...Làm cách nào để làm cho trình xử lý sự kiện chạy không đồng bộ?
class TestClass
{
private Thread SecondaryThread;
public event EventHandler OperationFinished;
public void StartMethod()
{
...
SecondaryThread.Start(); //start the secondary thread
}
private void SecondaryThreadMethod()
{
...
OperationFinished(null, new EventArgs());
... //This is where the program waits for whatever operations take
//place when OperationFinished is triggered.
}
}
Mã này là một phần của API cho một trong các thiết bị của tôi. Khi sự kiện OperationFinished được kích hoạt, tôi muốn ứng dụng khách có thể làm bất cứ điều gì cần thiết (tức là cập nhật GUI cho phù hợp) mà không làm hỏng hoạt động API.
Ngoài ra, nếu tôi không muốn chuyển bất kỳ tham số nào cho trình xử lý sự kiện, cú pháp của tôi có đúng không bằng cách sử dụng OperationFinished(null, new EventArgs())
?
Những chủ đề nào bạn muốn các 'sự kiện OperationFinished' được nâng lên trên? Nó không thể là chuỗi thứ cấp của bạn, vì bạn yêu cầu không chặn nó một cách rõ ràng. Liệu nó có phải là chủ đề chính, sau đó, hoặc là bạn tốt với nó được đưa ra trên một chủ đề khác nhau mới được tạo ra chỉ với mục đích gọi lại async? –