Lệnh thoát ứng dụng Console trong C # là gì?


Câu trả lời:


333

Bạn có thể sử dụng Environment.Exit(0);Application.Exit

Environment.Exit(0) là sạch .


8
Chỉ tò mò, những gì làm cho nó sạch hơn?
Cấp H.

Điều này hoạt động hoàn hảo với tôi khi tôi thêm đồng hồ bấm giờ vào ứng dụng bảng điều khiển thông qua stackoverflow.com/a/7865126/1530166 . Application.Exit đã không làm điều đó, ngay cả khi sử dụng stackoverflow.com/a/37029044/1530166 .
Jason Anderson

5
@GHH. nó sạch hơn vì nó cung cấp cho hệ điều hành bên dưới một mã lỗi hữu ích hơn tại sao nó lại thoát.
Fayssal El Mofatiche

Tuy nhiên, Environment.Exityêu cầu bạn phải có quyền SecurityPermissionFlag.UnmanagedCode - điều này có thể gây rắc rối cho một số người.
wp78de

93

Một số tùy chọn, theo thứ tự của cách thích hợp nhất:

  1. Trả về một int từ phương thức Program.Main
  2. Ném một ngoại lệ và không xử lý nó ở bất cứ đâu (sử dụng cho các tình huống lỗi không mong muốn)
  3. Để buộc chấm dứt ở nơi khác, System.Environment.Exit( không phải di động! Xem bên dưới )

Đã chỉnh sửa 9/2013 để cải thiện khả năng đọc

Quay trở lại với một mã thoát cụ thể: Như Servy chỉ ra trong các nhận xét, bạn có thể khai báo Main bằng intloại trả về và trả về mã lỗi theo cách đó. Vì vậy, thực sự không cần sử dụng Môi trường. Ngoại trừ khi bạn cần chấm dứt với mã thoát và không thể thực hiện được trong phương thức Chính. Hầu hết có lẽ bạn có thể tránh điều đó bằng cách ném một ngoại lệ và trả lại mã lỗi trong Main nếu có bất kỳ ngoại lệ nào chưa được xử lý lan truyền ở đó. Nếu ứng dụng đa luồng, có lẽ bạn sẽ cần nhiều bản soạn sẵn hơn để chấm dứt đúng cách với mã thoát để bạn có thể tốt hơn nếu chỉ gọi Môi trường.Exit.

Một điểm khác chống lại việc sử dụng Evironment.Exit- ngay cả khi viết các ứng dụng đa luồng - là khả năng sử dụng lại . Nếu bạn muốn sử dụng lại mã của mình trong môi trường Environment.Exitkhông liên quan (chẳng hạn như thư viện có thể được sử dụng trong máy chủ web), mã sẽ không thể mang theo được. Theo tôi, giải pháp tốt nhất vẫn là sử dụng các ngoại lệ và / hoặc trả về các giá trị thể hiện rằng phương thức đã đạt đến một số trạng thái lỗi / kết thúc. Bằng cách đó, bạn luôn có thể sử dụng cùng một mã trong bất kỳ môi trường .NET nào và trong bất kỳ loại ứng dụng nào. Nếu bạn đang viết cụ thể một ứng dụng cần trả về mã thoát hoặc chấm dứt theo cách tương tự như Environment.Exitvậy, thì bạn có thể tiếp tục và bọc luồng ở mức cao nhất và xử lý các lỗi / ngoại lệ khi cần.


10
Đó là lựa chọn cuối cùng là trong hương vị xấu. Không có lập trình viên nào muốn thoát khỏi một chương trình bằng cách ném ngoại lệ.
Nikhil Agrawal

5
Như tôi đã viết "theo thứ tự phù hợp nhất". Ngoài ra, trong một số trường hợp, ném ngoại lệ là cách chính xác (chẳng hạn như khi xảy ra lỗi không mong muốn, nghiêm trọng không xảy ra, từ đó ứng dụng sẽ không bao giờ khôi phục được). Tôi đã cập nhật câu trả lời để làm rõ.
sinelaw

Nếu bạn ở Main, bạn chỉ có thể trả về 0, 1, v.v. và đánh dấu chữ ký phương thức là trả về một int để trả về mã lỗi, bạn KHÔNG CẦN sử dụng Môi trường.Exit để chỉ định mã lỗi.
Phục vụ

2
Phụ thuộc vào mức độ sâu sắc của ngăn xếp cuộc gọi và bạn có ở trong chuỗi chính hay không. Việc gọi môi trường có thể đơn giản hơn. Mở rộng hơn là để kiến ​​trúc sư toàn bộ chương trình của bạn trả lại toàn bộ chức năng chính mà không sử dụng ngoại lệ để giải phóng ngăn xếp cuộc gọi (sẽ không hoạt động từ một luồng nền; hoặc ThreadPool sẽ nuốt ngoại lệ hoặc sẽ ném nó ra ngoài, dù bằng cách nào, bất kỳ logic bắt nào trong phương thức chính hoặc luồng sẽ không bao giờ nhìn thấy nó.
KeithS

Tôi đã thay đổi thứ tự của các tùy chọn. Ném một ngoại lệ có lợi thế là làm cho mã của bạn dễ dàng sử dụng lại như một thư viện trong các môi trường thực thi khác nhau.
sinelaw

26

Các ứng dụng Console sẽ thoát khi chức năng chính đã chạy xong. Một "sự trở lại" sẽ đạt được điều này.

    static void Main(string[] args)
    {
        while (true)
        {
            Console.WriteLine("I'm running!");
            return; //This will exit the console application's running thread
        }
    }

Nếu bạn trả về mã lỗi, bạn có thể thực hiện theo cách này, có thể truy cập được từ các chức năng bên ngoài chuỗi ban đầu:

    System.Environment.Exit(-1);

9

Bạn có thể sử dụng Environment.Exit(0)Application.Exit.

Environment.Exit(): chấm dứt quá trình này và cung cấp cho hệ điều hành bên dưới mã thoát được chỉ định.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.