2009-03-28 110 views
29

Tôi đang duy trì một số ứng dụng giao diện điều khiển tại nơi làm việc và một điều tôi đã chú ý trong một số là chúng gọi Environment.Exit (0).Khi nào nên sử dụng Environment.Exit để chấm dứt ứng dụng bảng điều khiển?

Một chương trình mẫu sẽ trông như thế này:

public class Program 
{ 
    public static void Main(string[] args) 
    { 
     DoStuff(); 
     Environment.Exit(0); 
    } 
} 

Tôi không hiểu những gì mục đích của các lập trình viên ban đầu là trong việc này? Trong tâm trí của tôi ngay cả khi không có câu lệnh Environment.Exit thì chương trình sẽ thoát ra tốt. Điều đó nói rằng, đối với một trong những chương trình này, cửa sổ giao diện điều khiển của nó đã được giữ lại ngay cả sau khi nó được cho là đã đóng vì vậy tôi thực sự không chắc chắn những gì đang xảy ra ở đó ....

Tôi có thiếu cái gì ở đây không? Hoặc là có một lý do tại sao Environment.Exit nên được gọi trong trường hợp này?

+3

rất nhiều thứ này là lập trình mê tín dị đoan, như đóng và xử lý đối tượng kết nối, mặc dù nó được bọc trong một cách sử dụng –

Trả lời

45

Lý do duy nhất để gọi Exit() là dòng cuối cùng của phương pháp chính là nếu có thể có các luồng tiền cảnh khác đang chạy. Họ sẽ tiếp tục chạy nếu thực hiện chỉ rơi xuống cuối Main. Ngay cả trong trường hợp này, nó thường sẽ là một ý tưởng tốt hơn hoặc để đưa vào một số chấm dứt duyên dáng rõ ràng vào các chủ đề khác - hoặc làm cho chúng nền chủ đề để bắt đầu.

Nếu bạn muốn trả lại mã thoát khác từ Main, cách đơn giản hơn để đạt được điều đó là khai báo nó để trả về int.Tóm lại, tôi không nghĩ rằng bạn cần Environment.Exit() ở đây, và nó đáng để hỏi đồng nghiệp của bạn chính xác lý do tại sao họ sử dụng nó - rất có thể họ sẽ không thể cung cấp cho bạn một lý do chính đáng, và đó là một chút của lông tơ bạn có thể cắt ra.

+0

Cảm ơn jon! Đừng nghĩ rằng tôi sẽ có nhiều may mắn yêu cầu các nhà phát triển ban đầu về nó kể từ khi cô đang nghỉ phép mẹ. Ít nhất bây giờ tôi biết rằng tôi có thể loại bỏ nó mà không lo lắng về việc phá vỡ một cái gì đó. – mezoid

+0

Câu hỏi được liên kết http://stackoverflow.com/questions/5253158/c-using-environment-exitcode-versus-returning-int-from-main cũng thêm thông tin hữu ích. –

13

Về cơ bản, tuyên bố Environment.Exit(0) cho hệ điều hành biết đây là lối ra "sạch". Ngoài ra, có một số khác có ý nghĩa khác như Environment.Exit(1)

Tuy nhiên, một điều cần lưu ý là "Chính" đã được khai báo là không trả về "void", vì vậy mã thoát sẽ thực sự không có ý nghĩa với nó .

Chỉ trong trường hợp bạn muốn biết thêm về các mã thoát khác nhau có một cái nhìn ở đây

system Error Codes

+1

'Main' được khai báo là không trả lại bất cứ điều gì không liên quan đến ý nghĩa của mã thoát. – Ryan

3

Đây là [tương thích] cho các chương trình dòng lệnh để chỉ ra sự thành công hay thất bại với một vỏ tiềm ẩn, và được thừa hưởng từ vòng chính C-phong cách cũ mà nguyên mẫu của hàm chính là

int main(void); 

int main(int argc, char *argv[]); 

giá trị trả về từ 0 thành công truyền thống có nghĩa là, trong khi khác không có nghĩa là thất bại hay cái gì khác, tùy thuộc vào w hat lập trình quyết định.

Reference:

wiki để biết thêm thông tin về main chức năng.

MSDN documenttion trên Environment.Exit()

Environment.Exit(): Kết thúc quá trình này và cung cấp cho các hệ điều hành cơ bản các quy định exit code.

+0

Trong trường hợp của tôi, ứng dụng bảng điều khiển của tôi là một ứng dụng độc lập và không cần phải thông báo cho OS bất cứ điều gì. Vì vậy, tôi đoán đó có nghĩa là cuộc gọi là dư thừa trong tình hình của tôi ....? – mezoid

+0

Đó là nhiều hơn về nói cho chương trình vỏ nếu chương trình của bạn thành công hay thất bại, có thể quan trọng xuống đường, vì vậy hãy đi theo quy ước. ví dụ. tập tin batch, tích hợp nAnt, trình cài đặt, v.v. –

+0

Đáng chú ý là một ứng dụng .NET console cũng có thể có phương thức chính trả về 'int' cũng như' void'. Tôi làm nó suốt. – tomfanning

0

Điều này thực sự được sử dụng khi các ứng dụng khác đang chờ kết quả của ứng dụng giao diện điều khiển của bạn. Ví dụ, SSRS (công cụ) có thể khởi chạy một ứng dụng giao diện điều khiển và chờ đợi để lấy lại thành công của phản hồi thất bại. Environment.Exit (0) gửi lại một thông điệp thực hiện thành công.

0

Trong SSIS khi bạn có Quy trình thực hiện quy trình và bạn muốn biết liệu quy trình có bị lỗi hay không, phương pháp này hữu ích.

Các vấn đề liên quan