Đồng hồ Windows Forms Timer cuối cùng bị hạn chế về độ phân giải cho độ phân giải đồng hồ hệ thống chuẩn của máy tính của bạn. Điều này thay đổi từ máy tính đến máy tính, nhưng thường từ 1 ms đến 20 ms.
Trong WinForms, bất cứ khi nào bạn yêu cầu một khoảng thời gian trong mã, Windows sẽ chỉ đảm bảo rằng bộ hẹn giờ của bạn sẽ được gọi là không thường xuyên hơn rồi xác định số mili giây. Nó không đảm bảo rằng Bộ hẹn giờ của bạn sẽ được gọi chính xác đến mili giây mà bạn chỉ định.
Điều này là do Windows là hệ điều hành chia sẻ thời gian chứ không phải theo thời gian thực. Các quy trình và chủ đề khác sẽ được lên lịch để chạy đồng thời và do đó, chuỗi của bạn sẽ bị buộc phải chờ thường xuyên để sử dụng bộ xử lý. Do đó, bạn không nên viết mã hẹn giờ WinForms dựa trên chính xác các khoảng thời gian hoặc sự chậm trễ của mili giây.
Trong trường hợp của bạn, đặt khoảng thời gian thành 1 ms thực sự chỉ yêu cầu Windows kích hoạt bộ hẹn giờ này thường xuyên nhất có thể. Như bạn đã thấy điều này chắc chắn ít hơn nhiều so với 1 ms (60fps = khoảng 17 ms).
Nếu bạn cần bộ hẹn giờ có độ phân giải chính xác và cao hơn, API Windows sẽ cung cấp bộ tính giờ hiệu suất/độ phân giải cao, nếu phần cứng của bạn hỗ trợ, xem How to use the high resolution timer. Một nhược điểm của việc này là việc sử dụng CPU ứng dụng của bạn sẽ được tăng lên để hỗ trợ hiệu năng cao hơn.
Nói chung, tôi nghĩ bạn nên thực hiện vòng lặp trò chơi độc lập về phần cứng/hệ thống. Bằng cách đó, hoạt ảnh cảm nhận của cảnh của bạn xuất hiện không đổi bất kể tỷ lệ khung hình thực tế đạt được.Để biết thêm thông tin these articles cho một nền tảng tốt.
Tuyệt vời! Sử dụng 'Application.Idle' có vẻ thanh lịch hơn một bộ hẹn giờ 1 ms. Tôi cũng sẽ phải thử 'StopWatch' này vào ngày mai. Cảm ơn! ** Chỉnh sửa: ** Thực ra, tôi đã nói dối. Khi bạn thay đổi kích thước hoặc di chuyển cửa sổ, nó dường như ngừng chạy không tải, và do đó dừng vẽ lại. Điều này về cơ bản làm giảm ưu tiên của bản vẽ. Có lẽ tôi sẽ dính với một bộ đếm thời gian để thực thi một tỷ lệ vẽ lại tối thiểu ... không có lý do tôi không thể kết hợp cả hai phương pháp. – mpen
Đồng thời, Đồng hồ bấm giờ chỉ tốt cho việc định thời gian, không phải cho các sự kiện gọi lại. – mpen
Bạn có thể thử khởi động bộ hẹn giờ khi không hoạt động thậm chí kết thúc, sau đó dừng/kiểm tra lại khi sự kiện nhàn rỗi kích hoạt. Bạn có thể nhận được khá gần theo cách này. – Nanook