C # 'da bir Konsol uygulamasından çıkış komutu nedir?


Yanıtlar:


333

Kullanabilirsiniz Environment.Exit(0);veApplication.Exit

Environment.Exit(0) daha temiz .


8
Sadece merak ediyorum, onu daha temiz yapan nedir?
Grant H.

Stackoverflow.com/a/7865126/1530166 aracılığıyla bir konsol uygulamasına bir zamanlayıcı eklediğimde bu benim için mükemmel çalıştı . Stackoverflow.com/a/37029044/1530166 kullanırken bile uygulama yapmadı .
Jason Anderson

5
@GrantH. altta yatan işletim sistemine neden çıktığını daha kullanışlı bir hata kodu verdiği için daha temizdir.
Fayssal El Mofatiche

Ancak, Environment.Exitbazıları için zahmetli olabilecek SecurityPermissionFlag.UnmanagedCode izinlerine sahip olmanızı gerektirir.
wp78de

93

En uygun şekilde sırayla çeşitli seçenekler:

  1. Program.Main yönteminden bir int döndürme
  2. Bir istisna atın ve hiçbir yerde işlemeyin (beklenmeyen hata durumları için kullanın)
  3. Sonlandırmayı başka bir yere zorlamak için System.Environment.Exit( taşınabilir değil! Aşağıya bakın )

Okunabilirliği artırmak için 9/2013 tarihinde düzenlendi

Belirli bir çıkış koduyla geri dönme : Servy'nin açıklamalarda belirttiği gibi, Main'i bir intdönüş türüyle bildirebilir ve bu şekilde bir hata kodu döndürebilirsiniz. Bu nedenle, gerçekten bir çıkış koduyla sonlandırmanız gerekmediği ve muhtemelen Ana yöntemde yapamayacağı sürece Environment.Exit'i kullanmaya gerek yoktur . Büyük olasılıkla bir istisna atarak ve işlenmemiş bir istisna orada yayılırsa Main'de bir hata kodu döndürerek bundan kaçınabilirsiniz. Uygulama çok iş parçacıklıysa, bir çıkış koduyla düzgün bir şekilde sonlandırmak için muhtemelen daha fazla kazan plakasına ihtiyacınız olacaktır, böylece yalnızca Environment.Exit'i çağırmak daha iyi olabilir.

Kullanıma karşı bir başka nokta Evironment.Exit- çok iş parçacıklı uygulamalar yazarken bile - yeniden kullanılabilirliktir . Kodunuzu Environment.Exitalakasız kılan bir ortamda (web sunucusunda kullanılabilecek bir kitaplık gibi) yeniden kullanmak isterseniz , kod taşınabilir olmaz. En iyi çözüm, bence, yöntemin bazı hata / bitiş durumuna ulaştığını temsil eden istisnalar ve / veya dönüş değerleri kullanmaktır. Bu şekilde, her zaman aynı kodu herhangi bir .NET ortamında ve her tür uygulamada kullanabilirsiniz. Özellikle bir çıkış kodu döndürmesi veya buna benzer bir şekilde sonlanması gereken bir uygulama Environment.Exityazıyorsanız, daha sonra iş parçacığını en üst düzeyde sarabilir ve hataları / istisnaları gerektiği gibi işleyebilirsiniz.


10
Bu son seçenek kötü tadı var. Hiçbir programcı istisna atarak bir programdan çıkmak istemez.
Nikhil Agrawal

5
Yazdığım gibi "en uygun sırayla". Ayrıca, belirli durumlarda bir istisna atmak doğru yoldur (örneğin, uygulamanın asla iyileşmeyeceği beklenmeyen, ölümcül bir hata oluştuğunda). Cevabı açıklığa kavuşturmak için güncelledim.
sinelaw

Main'deyseniz, 0, 1 vb. Döndürebilir ve yöntem imzasını bir hata kodu döndürmek için int döndürürken işaretleyebilirsiniz, bir hata kodu belirtmek için Environment.Exit kullanmanız gerekmez.
Servy

2
Çağrı yığınında ne kadar derin olduğunuza ve ana mesaj dizisinde olup olmadığınıza bağlıdır. Ortam yığınını çağırmak daha basit olabilir.Arama yığınını gevşetmek için bir istisna kullanmadan (bir arka plan iş parçacığından işe yaramayacak; ya da ThreadPool) istisna veya işlenmemiş atmak, her iki şekilde de ana yöntem veya iş parçacığı herhangi bir catch mantığı asla
görmezdim

Seçeneklerin sırasını değiştirdim. Bir istisna atmak, kodunuzu farklı yürütülebilir ortamlarda kitaplık olarak yeniden kullanmayı daha kolay hale getirme avantajına sahiptir.
sinelaw

26

Ana işlev çalışmayı bitirdiğinde konsol uygulamaları çıkacaktır. Bir "geri dönüş" bunu başaracaktır.

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

Bir hata kodu döndürüyorsanız, bunu ilk iş parçacığının dışındaki işlevlerden erişilebilen şekilde yapabilirsiniz:

    System.Environment.Exit(-1);

9

Sen kullanabilirsiniz Environment.Exit(0)ve Application.Exit.

Environment.Exit(): bu işlemi sonlandırır ve temel işletim sistemine belirtilen çıkış kodunu verir.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.