Làm cách nào để ngăn chặn xử lý sự kiện mới bắt đầu khi xử lý sự kiện đang chạy?Delphi và ngăn sự kiện xử lý
Tôi nhấn nút button1 và trình xử lý sự kiện, ví dụ: công việc in chậm. Có một số điều khiển trong các nút biểu mẫu, chỉnh sửa, combo và tôi muốn rằng một sự kiện mới chỉ được phép sau khi chạy trình xử lý được kết thúc.
Tôi đã sử dụng biến fRunning để khóa trình xử lý trong trình xử lý sự kiện được chia sẻ. Có cách nào thông minh hơn để xử lý việc này không?
procedure TFormFoo.Button_Click(Sender: TObject);
begin
if not fRunning then
try
fRunning := true;
if (Sender = Button1) then // Call something slow ...
if (Sender = Button2) then // Call something ...
if (Sender = Button3) then // Call something ...
finally
fRunning := false;
end;
end;
Giải pháp tuyệt vời này nếu chỉ có một Button1 trong biểu mẫu. OnClick của Button1 bị tắt, nhưng Button2 có thể kích hoạt sự kiện OnClick mới nếu Application.ProcessMessages được gọi trong khi xử lý sự kiện Button1. – pKarelian
Cảm ơn dummzeuch. Trình bao bọc giao diện là cách rất tiện dụng để tiêu diệt đối tượng sự kiện tạm thời. Bạn không phải gọi miễn phí(). – pKarelian
+1 nhưng trong * lý thuyết *, có khả năng sự kiện không được đính kèm lại một thời gian. Trong thực tế, tôi nghĩ rằng nó là an toàn để giả định rằng trường hợp giao diện bị phá hủy khi cuộc gọi được thực hiện (và eventhandler được đính kèm lại). –