คำสั่งให้ออกจากแอปพลิเคชันคอนโซลใน C # คืออะไร


คำตอบ:


333

คุณสามารถใช้Environment.Exit(0);และApplication.Exit

Environment.Exit(0) สะอาดกว่า


8
แค่อยากรู้สิ่งที่ทำให้มันสะอาด
Grant H.

นี้ทำงานได้อย่างสมบูรณ์แบบสำหรับฉันเมื่อฉันเพิ่มจับเวลาเป็นแอปคอนโซลผ่านstackoverflow.com/a/7865126/1530166 Application.Exit ไม่ได้ทำมันแม้เมื่อใช้stackoverflow.com/a/37029044/1530166
Jason Anderson

5
@GrantH มันสะอาดกว่าเพราะจะให้รหัสข้อผิดพลาดที่เป็นประโยชน์กับระบบปฏิบัติการออกมา
Fayssal El Mofatiche

อย่างไรก็ตามEnvironment.Exitต้องการให้คุณมีสิทธิ์ SecurityPermissionFlag.UnmanagedCode ซึ่งอาจเป็นปัญหาสำหรับบางคน
wp78de

93

หลายตัวเลือกตามลำดับวิธีที่เหมาะสมที่สุด:

  1. คืนค่า int จากวิธี Program.Main
  2. โยนข้อยกเว้นและไม่จัดการกับที่ใดก็ได้ (ใช้สำหรับสถานการณ์ข้อผิดพลาดที่ไม่คาดคิด)
  3. หากต้องการบังคับให้เลิกจ้างที่อื่นSystem.Environment.Exit( ไม่ใช่พกพา! ดูด้านล่าง )

แก้ไขเมื่อวันที่ 9/2013 เพื่อปรับปรุงความสามารถในการอ่าน

การส่งคืนด้วยรหัสการออกเฉพาะ:เนื่องจาก Servy ชี้ให้เห็นในความคิดเห็นคุณสามารถประกาศหลักด้วยintประเภทการส่งคืนและส่งคืนรหัสข้อผิดพลาดในลักษณะนั้น ดังนั้นจึงไม่จำเป็นต้องใช้ Environment.Exit เว้นแต่คุณจะต้องยุติด้วยรหัสทางออกและไม่สามารถทำได้ในวิธีการหลัก ส่วนใหญ่คุณสามารถหลีกเลี่ยงปัญหานั้นได้โดยการส่งข้อยกเว้นและส่งคืนรหัสข้อผิดพลาดใน Main หากมีข้อยกเว้นที่ไม่สามารถจัดการได้เผยแพร่ที่นั่น หากแอปพลิเคชั่นเป็นแบบมัลติเธรดคุณอาจต้องใช้หม้อไอน้ำมากขึ้นเพื่อยกเลิกรหัสทางออกอย่างถูกต้องดังนั้นคุณอาจจะดีกว่าเพียงแค่เรียก Environment.Exit

ข้อดีอีกประการของการใช้งานEvironment.Exitแม้ว่าจะเขียนแอพพลิเคชั่นแบบมัลติเธรดก็สามารถนำมาใช้ซ้ำได้ หากคุณต้องการใช้รหัสในสภาพแวดล้อมที่Environment.Exitไม่เกี่ยวข้อง (เช่นห้องสมุดที่อาจใช้ในเว็บเซิร์ฟเวอร์) รหัสนั้นจะไม่สามารถพกพาได้ ทางออกที่ดีที่สุดคือในความคิดของฉันที่จะใช้ข้อยกเว้นและ / หรือค่าตอบแทนที่แสดงว่าวิธีการถึงสถานะข้อผิดพลาด / เสร็จสิ้นบาง ด้วยวิธีนี้คุณสามารถใช้รหัสเดียวกันในสภาพแวดล้อม. NET และแอปพลิเคชันประเภทใดก็ได้ หากคุณกำลังเขียนแอพโดยเฉพาะที่ต้องการส่งคืนรหัสออกหรือเพื่อยุติในลักษณะที่คล้ายกับสิ่งที่Environment.Exitทำคุณสามารถไปข้างหน้าและตัดเธรดที่ระดับสูงสุดและจัดการข้อผิดพลาด / ข้อยกเว้นตามต้องการ


10
ตัวเลือกสุดท้ายนั้นมีรสชาติไม่ดี โปรแกรมเมอร์ไม่ต้องการออกจากโปรแกรมโดยการโยนข้อยกเว้น
Nikhil Agrawal

5
ตามที่ฉันเขียน "ตามลำดับที่เหมาะสมที่สุด" นอกจากนี้ในบางสถานการณ์การโยนข้อยกเว้นเป็นวิธีที่ถูกต้อง (เช่นเมื่อเกิดข้อผิดพลาดร้ายแรงที่ไม่ควรเกิดขึ้นซึ่งแอปพลิเคชันจะไม่กู้คืน) ฉันได้ปรับปรุงคำตอบเพื่อชี้แจง
sinelaw

หากคุณอยู่ใน Main คุณสามารถส่งคืน 0, 1 และอื่น ๆ และทำเครื่องหมายเมธอดเป็นส่งกลับ int เพื่อส่งคืนรหัสข้อผิดพลาดคุณไม่จำเป็นต้องใช้ Environment.Exit เพื่อระบุรหัสข้อผิดพลาด
บริการ

2
ขึ้นอยู่กับว่าคุณโทรอยู่ลึกแค่ไหนและอยู่ในหัวข้อหลักหรือไม่ มันง่ายกว่าที่จะเรียก Environment.Exit กว่าสร้างโปรแกรมทั้งหมดของคุณเพื่อส่งกลับไปยังฟังก์ชันหลักโดยไม่ใช้ข้อยกเว้นเพื่อคลาย call stack (ซึ่งจะไม่ทำงานจากเธรดพื้นหลังทั้ง ThreadPool จะกลืน ข้อยกเว้นหรือจะโยนมันออก unhandled, ทั้งทางตรรกะจับใด ๆ ในวิธีการหลักหรือด้ายจะไม่เห็นมัน.
Keiths

ฉันเปลี่ยนลำดับของตัวเลือก การโยนข้อยกเว้นมีข้อได้เปรียบในการทำให้รหัสของคุณง่ายขึ้นมากที่จะนำมาใช้ใหม่เป็นห้องสมุดในสภาพแวดล้อมที่ปฏิบัติการแตกต่างกัน
sinelaw

26

แอปพลิเคชั่นของคอนโซลจะออกเมื่อฟังก์ชั่นหลักทำงานเสร็จสิ้น "การคืน" จะบรรลุเป้าหมายนี้

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

หากคุณส่งคืนรหัสข้อผิดพลาดคุณสามารถทำได้ด้วยวิธีนี้ซึ่งสามารถเข้าถึงได้จากฟังก์ชั่นภายนอกเธรดเริ่มต้น:

    System.Environment.Exit(-1);

9

คุณสามารถใช้และEnvironment.Exit(0)Application.Exit

Environment.Exit(): ยุติกระบวนการนี้และให้รหัสทางออกที่ระบุแก่ระบบปฏิบัติการ

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.