Apa perintah untuk keluar dari aplikasi Konsol di C #?

256

Apa perintah dalam C # untuk keluar dari Aplikasi Konsol?

Sababoni
sumber

Jawaban:

333

Anda bisa menggunakan Environment.Exit(0);danApplication.Exit

Environment.Exit(0) lebih bersih .

Nikhil Agrawal
sumber
8
Hanya penasaran, apa yang membuatnya lebih bersih?
Grant H.
Ini berfungsi dengan baik untuk saya ketika saya menambahkan timer ke aplikasi konsol melalui stackoverflow.com/a/7865126/1530166 . Application.Exit tidak melakukannya, bahkan ketika menggunakan stackoverflow.com/a/37029044/1530166 .
Jason Anderson
5
@GrantH. itu lebih bersih karena memberikan sistem operasi yang mendasari kode kesalahan yang lebih berguna mengapa ia keluar.
Fayssal El Mofatiche
Namun, Environment.Exitmengharuskan Anda memiliki izin SecurityPermissionFlag.UnmanagedCode - yang mungkin menyusahkan bagi sebagian orang.
wp78de
93

Beberapa opsi, dengan urutan cara yang paling tepat:

  1. Kembalikan int dari metode Program. Utama
  2. Lempar pengecualian dan jangan menanganinya di mana saja (gunakan untuk situasi kesalahan yang tidak terduga)
  3. Untuk memaksa pemutusan di tempat lain, System.Environment.Exit( tidak portabel! Lihat di bawah )

Diedit 9/2013 untuk meningkatkan keterbacaan

Kembali dengan kode keluar tertentu: Seperti yang ditunjukkan Servy dalam komentar, Anda dapat mendeklarasikan Main dengan inttipe kembali dan mengembalikan kode kesalahan seperti itu. Jadi benar-benar tidak perlu menggunakan Lingkungan. Keluar kecuali jika Anda perlu mengakhiri dengan kode keluar dan tidak mungkin melakukannya dalam metode Utama. Kemungkinan besar Anda dapat menghindarinya dengan melemparkan pengecualian, dan mengembalikan kode kesalahan di Utama jika ada pengecualian yang tidak tertangani menyebar di sana. Jika aplikasi ini multi-threaded, Anda mungkin perlu boilerplate lebih untuk mengakhiri dengan benar dengan kode keluar sehingga Anda mungkin lebih baik hanya memanggil Lingkungan. Keluar.

Hal lain yang menentang penggunaan Evironment.Exit- bahkan ketika menulis aplikasi multi-utas - adalah usabilitas ulang . Jika Anda ingin menggunakan kembali kode Anda di lingkungan yang membuat Environment.Exittidak relevan (seperti perpustakaan yang dapat digunakan di server web), kode tersebut tidak akan portabel. Solusi terbaik masih, menurut pendapat saya, untuk selalu menggunakan pengecualian dan / atau mengembalikan nilai yang menyatakan bahwa metode tersebut mencapai beberapa kesalahan / selesai. Dengan begitu, Anda selalu dapat menggunakan kode yang sama di lingkungan .NET, dan dalam jenis aplikasi apa pun. Jika Anda menulis secara khusus aplikasi yang perlu mengembalikan kode keluar atau mengakhiri dengan cara yang mirip dengan apa yang Environment.Exitdilakukan, Anda dapat melanjutkan dan membungkus utas di tingkat tertinggi dan menangani kesalahan / pengecualian sesuai kebutuhan.

sinelaw
sumber
10
Pilihan terakhir itu tidak enak. Tidak ada programmer yang ingin keluar dari program dengan melemparkan pengecualian.
Nikhil Agrawal
5
Seperti yang saya tulis "atas perintah yang paling tepat". Selain itu, dalam situasi tertentu melemparkan pengecualian ADALAH cara yang benar (seperti ketika kesalahan tak terduga dan fatal yang seharusnya tidak terjadi terjadi dari mana aplikasi tidak akan pernah pulih). Saya telah memperbarui jawaban untuk menjelaskan.
sinelaw
Jika Anda berada di Main, Anda bisa mengembalikan 0, 1, dll. Dan menandai tanda tangan metode sebagai mengembalikan int untuk mengembalikan kode kesalahan, Anda tidak perlu menggunakan Lingkungan. Keluar untuk menentukan kode kesalahan.
Servy
2
Bergantung pada seberapa dalam tumpukan panggilan Anda dan apakah Anda berada di utas utama. Akan lebih mudah untuk memanggil Lingkungan. Keluar daripada merancang seluruh program Anda untuk kembali ke fungsi utama tanpa menggunakan pengecualian untuk melepaskan tumpukan panggilan (yang tidak akan bekerja dari utas latar belakang; ThreadPool akan menelan pengecualian atau akan membuangnya tanpa penanganan, dengan cara apa pun logika tangkap dalam metode utama atau utas tidak akan pernah melihatnya
KeithS
Saya mengubah urutan opsi. Melempar pengecualian memiliki keuntungan membuat kode Anda lebih mudah untuk digunakan kembali sebagai perpustakaan di lingkungan yang dapat dieksekusi yang berbeda.
sinelaw
26

Aplikasi konsol akan keluar ketika fungsi utama selesai berjalan. "Pengembalian" akan mencapai ini.

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

Jika Anda mengembalikan kode kesalahan, Anda dapat melakukannya dengan cara ini, yang dapat diakses dari fungsi di luar utas awal:

    System.Environment.Exit(-1);
Pengembang
sumber
9

Anda bisa menggunakan Environment.Exit(0)dan Application.Exit.

Environment.Exit(): mengakhiri proses ini dan memberikan sistem operasi yang mendasari kode keluar yang ditentukan.

aaaaaaaaaaaaaaaaaaaaaaaaaaaaa
sumber