2012-10-24 17 views
41

Sau đây là những cách mà chúng ta có thể thoát khỏi một ứng dụng:Winforms: Application.Exit vs Enviroment.Exit vs Form.Close

  1. Enviroment.Exit(0)
  2. Application.Exit()
  3. Form.Close()

gì khác nhau giữa ba phương pháp này và khi nào sử dụng mỗi phương pháp?

+5

Đây không phải là một câu hỏi trùng lặp. Tôi không yêu cầu cái nào để sử dụng để thoát khỏi ứng dụng. Tôi chỉ yêu cầu sự khác biệt giữa các phương pháp này vì nó thực hiện hoạt động tương tự. –

Trả lời

75

Phương pháp thích hợp sẽ là Application.Exit(). Theo Documentation, nó chấm dứt tất cả các vòng lặp tin nhắn và đóng tất cả các cửa sổ, do đó cho các hình thức của bạn khả năng để thực thi mã dọn dẹp của họ (trong Form.OnClose vv).

Environment.Exit sẽ chỉ xóa quá trình. Nếu một số biểu mẫu có, ví dụ: những thay đổi chưa lưu sẽ không có bất kỳ cơ hội nào để hỏi người dùng nếu anh ta muốn lưu chúng. Ngoài ra tài nguyên (kết nối cơ sở dữ liệu, v.v.) không thể được phát hành đúng cách, các tệp có thể không bị xóa, v.v.

Form.Close chỉ cần thực hiện những gì nó nói: nó đóng một biểu mẫu. Nếu bạn có các biểu mẫu khác được mở (có thể không phải bây giờ nhưng trong một số phiên bản tương lai của đơn của bạn), ứng dụng sẽ không chấm dứt.

Hãy nhớ rằng nếu bạn sử dụng đa luồng, Application.Exit() sẽ không chấm dứt chuỗi của bạn (và do đó ứng dụng sẽ tiếp tục làm việc trong nền, ngay cả khi GUI bị chấm dứt). Do đó, bạn phải thực hiện các biện pháp để tiêu diệt chủ đề của mình, hoặc trong chức năng chính (ví dụ: Program.Main()) hoặc khi trong sự kiện OnClose của biểu mẫu chính của bạn.

+2

+1 để tham khảo tài liệu –

+3

Bạn có thể đặt thuộc tính IsBackground trên các chuỗi sao cho chúng không ngăn quá trình chấm dứt. –

+1

Bạn có nói gì về việc xóa các tệp thực sự đúng không? Khi một quá trình bị giết, hệ điều hành sẽ đóng tất cả các tay cầm hiện có mà cũng làm sạch các chốt. –

2

tất cả đều ổn. nhưng form.Close() sẽ không đóng ứng dụng của bạn nó đóng biểu mẫu và sau đó phương thức chính trả về một int (exitcode).

nếu bạn muốn ứng dụng của bạn thoát với exitcodes sử dụng Environmet.Exit(exitcode) hoặc trả lại exit code trong chính-method