Tôi đã có một ứng dụng kế thừa ở đây có một vài vòng 'tốn thời gian' bị loại bỏ do sự tương tác của người dùng khác nhau. Mã tốn thời gian định kỳ cập nhật một cái gì đó trên màn hình với thông tin tiến độ (thường là một nhãn) và sau đó, dường như thuyết phục việc làm mới hình ảnh xảy ra ở đó và sau đó, mã gọi Application.ProcessMessages (argh!). Bây giờ chúng ta đều biết loại rắc rối nào có thể giới thiệu với một ứng dụng GUI (từ thiện, đó là thời gian vô tội hơn) và chúng tôi nhận thấy chắc chắn là trứng, đôi khi chúng tôi thu hút người dùng đạt được không thể với chương trình bởi vì họ đang nhấp vào điều khiển trong khi chương trình là 'bận'.Nhận cửa sổ để làm mới (v.v.) mà không cần gọi Application.ProcessMessages?
Cách tốt nhất để làm mới định kỳ hình ảnh của biểu mẫu mà không cần thực hiện các sự kiện/tin nhắn khác, v.v ...?
Suy nghĩ của tôi là;
- vô hiệu hóa tất cả các điều khiển trước khi làm bất cứ điều gì tốn thời gian, và để lại các cuộc gọi của ... ProcessMessages' tại chỗ để 'lực lượng' làm mới, hoặc
- tìm một cách khác để làm mới một điều khiển kỳ
Tôi có thể làm điều cũ nhưng nó khiến tôi băn khoăn - liệu có giải pháp nào tốt hơn không?
mã mẫu từ cũ;
i:=0; while FJobToBeDone do begin DoStepOfLoop; inc(i); if i mod 100 = 0 then begin UpdateLabelsEtc; Application.ProcessMessages; end; end;
Tôi có thể nghe thấy tất cả các bạn ngất xỉu, ở phía sau. :-)
giao ngay trên mghie , cảm ơn! Tôi đã bỏ điều này vào một vài địa điểm chính và thử nghiệm nhanh; các cập nhật màn hình chỉ diễn ra tốt nhưng các điều khiển không tạo ra các sự kiện 'mới' trong khi biểu mẫu đang bận. Nếu tôi kết hợp điều này cùng với một cách rõ ràng khóa xuống dưới hình thức khi công việc bắt đầu, tôi hy vọng rằng điều này sẽ ngăn chặn các sự kiện lừa đảo nhận được mặc dù. Cảm ơn nhiều! – robsoft