2010-06-13 22 views
5

Tôi đã nghĩ rằng WinForms là các lớp như bất kỳ lớp nào khác. Nhưng bắt đầu hình thức dự án làm cho tôi bối rối. Tại sao Form mới bắt đầu với Application.Run và loại cơ chế nào xảy ra bên trong nó?Application.Run() làm gì?

Trả lời

12

Như đã nói trong documentation, nó bắt đầu chạy vòng lặp thông báo ứng dụng chuẩn trên chuỗi hiện tại. Vòng lặp tin nhắn xử lý các nhấp chuột, nhấn phím, yêu cầu vẽ và nhiều thứ khác.

Khi được gọi là with a form as an argument, nó cũng làm cho biểu mẫu đó hiển thị.

+0

Application.Run hoạt động như cầu nối giữa hệ điều hành và lớp Biểu mẫu? Nhưng cơ chế nền hoạt động như thế nào? Application.Run sử dụng một số phương thức Class classes (gửi đối số tin nhắn)? – Freshblood

+0

Thông thường tôi mong đợi Form thực hiện công việc của mình một cách tự nhiên nhưng có vẻ như nó để lại một số công việc cho Application.Run – Freshblood

+2

Một biểu mẫu điển hình không làm bất cứ điều gì cho đến khi một sự kiện được nâng lên. Nếu không có vòng lặp thông điệp, các sự kiện sẽ không được nâng lên để không có gì xảy ra. Thử hiển thị một biểu mẫu mà không cần gọi 'Application.Run (form);'. Biểu mẫu sẽ xuất hiện nhưng nó sẽ hoàn toàn không phản hồi. Nó thậm chí không sơn chính xác. Điều tương tự cũng xảy ra nếu bạn viết mã chặn trong trình xử lý sự kiện - nếu bạn chặn luồng chính bạn ngăn vòng lặp thông báo chạy vì vậy biểu mẫu của bạn không nhận được thêm bất kỳ sự kiện nào. –

4

Làm theo cách này quay lại số Win32 API. Winforms nằm trên đỉnh win32 api. Application.Run() cắm chương trình của bạn vào (thực hiện) win32 message loop. Khá nhiều sự kiện chuột và bàn phím (và hầu hết mọi thứ khác do người dùng khởi xướng) đều thực sự là thông điệp win32.