在 C# 中正確退出應用程式

Muhammad Maisam Abbas 2023年12月11日
  1. 使用C#中的Environment.Exit()函式以及退出控制台應用程式
  2. 使用Application.Exit()函式以及退出控制台應用程式
  3. 使用 Environment.Exit()Application.Exit() 函式正確退出應用程式
  4. 使用 Application.ExitThread() 方法退出應用程式
  5. 結論
在 C# 中正確退出應用程式

以優雅的方式退出C#應用程式是軟體開發中的一個重要方面,C#提供了幾種方法來達到這個目標。無論您想要結束整個應用程式還是退出特定的執行緒並保留其他執行緒,了解這些方法對於確保應用程式終止時的清潔和受控非常重要。

在本文中,我們將探討不同的方法來退出C#應用程式,包括Environment.Exit()Application.Exit()Application.ExitThread()。我們將深入研究它們的使用情境、場景和最佳實踐。

使用C#中的Environment.Exit()函式以及退出控制台應用程式

Environment.Exit(exitCode)函式用於以exitCode作為結束碼來終止C#應用程式。Environment.Exit()函式終止整個目前應用程式並將結束碼回傳給目前的作業系統。

Environment.Exit()方法是C#中System命名空間的一部分,並提供一種強制終止應用程式的方法。

這是該方法如何運作的詳細說明:

函式簽章

Environment.Exit()函式具有一個參數: 一個表示結束碼的整數。結束碼是一個數值,用於將應用程式結束的原因傳遞給作業系統。

按慣例,值為0通常表示成功和正常的結束,而非零值可用於指示錯誤或特定的結束條件。

基本用法

要使用Environment.Exit()方法,只需在您的C#程式碼中呼叫它,並傳遞適當的結束碼作為參數。以下是一個基本範例:

Environment.Exit(0);  // Exit the application with a success code

在此範例中,應用程式以結束碼0退出,表示成功終止。

正常應用程式退出

請參見以下範例程式碼。

using System;

namespace exit_application {
  class Program {
    static void Main(string[] args) {
      Console.WriteLine("The Text before Exit");
      Environment.Exit(0);
      Console.WriteLine("The Text after Exit");
    }
  }
}

輸出:

The Text before Exit

以上程式碼只輸出了"退出之前的文字",因為在Console.WriteLine("退出之後的文字");之前,我們使用Environment.Exit(0)函式完全結束了應用程式。Environment.Exit()函式可用於基於控制台和WinForms的應用程式。

處理錯誤退出

假設您正在建立一個命令列工具,在執行期間發生錯誤。您可以使用Environment.Exit()以適當的錯誤碼退出應用程式:

using System;

class Program {
  static void Main() {
    try {
      // Simulate an error
      throw new Exception("An error occurred.");
    } catch (Exception ex) {
      Console.WriteLine($"Error: {ex.Message}");

      // Exit the application with a non-zero exit code to indicate an error
      Environment.Exit(1);
    }
  }
}

輸出:

Error: An error occurred.

Error: Command failed: timeout 7 mono HelloWorld.exe

在此範例中,當遇到錯誤時,應用程式以結束碼1退出,表示發生錯誤。

使用Application.Exit()函式以及退出控制台應用程式

Application.Exit()函式終止使用Application.Run()函式啟動的所有訊息迴圈,然後退出C#中目前應用程式的所有視窗。

Application.Exit()方法是System.Windows.Forms命名空間的一部分,主要用於Windows Forms應用程式以實現受控和優雅的退出。

與某些其他強制終止應用程式的方法不同,Application.Exit()允許您的應用程式在退出之前執行必要的清理操作和處理事件。讓我們深入了解此方法的細節以及何時使用它。

函式簽章

Application.Exit()方法具有簡單的函式簽章,不需要任何參數。您可以在C#程式碼中直接呼叫它來啟動退出程序。

System.Windows.Forms.Application.Exit();

使用 Application.Exit() 方法非常簡單。通常,你會將該方法的呼叫放置在用戶操作或應用程式事件的處理常式中,以指示需求退出的情況。以下是一個基本的範例:

using System;
using System.Windows.Forms;

namespace MyWindowsApp {
  public partial class MainForm : Form {
    public MainForm() {
      InitializeComponent();
    }

    private void exitButton_Click(object sender, EventArgs e) {
      // Perform any necessary cleanup or validation here
      // ...

      // Exit the application gracefully
      System.Windows.Forms.Application.Exit();
    }
  }
}

在這個範例中,當點擊按鈕時,exitButton_Click 事件處理常式會被觸發。在呼叫 Application.Exit() 之前,你可以添加代碼來執行應用程式特定的清理或驗證。

我們使用 C# 中的 Application.Exit() 函式來關閉一個 WinForms 應用程式及其相關的所有執行緒。相較於 Environment.Exit() 函式,這個方法更優選,因為 Environment.Exit() 函式無法終止所有應用程式的訊息迴圈。

使用 Environment.Exit()Application.Exit() 函式正確退出應用程式

我們可以使用 Environment.Exit()Application.Exit() 函式的結合來正確退出 C# 應用程式。以下程式碼範例展示了如何結合 Environment.Exit()Application.Exit() 函式來適當地關閉應用程式。

using System;
using System.Windows.Forms;

if (Application.MessageLoop == true) {
  Application.Exit();
} else {
  Environment.Exit(1);
}

在上述程式碼中,如果應用程式之前呼叫過 Application.Run() 函式,我們會使用 Application.Exit() 函式來關閉應用程式。否則,我們會使用 Environment.Exit(1) 函式,並給定 1 作為傳給操作系統的退出碼。

使用 Application.ExitThread() 方法退出應用程式

Application.ExitThread() 方法屬於 System.Windows.Forms 命名空間,通常在 Windows Forms 應用程式中使用。

與其他一些退出整個應用程式的方法不同,Application.ExitThread() 方法可讓你退出特定的應用程式執行緒,保留其他執行緒的運行,並保護應用程式的功能。

方法簽名

Application.ExitThread() 方法需要一個參數,該參數是表示要退出的執行緒的 Thread 類的實例,允許你精確指定要終止的執行緒:

System.Windows.Forms.Application.ExitThread(Thread thread);

使用 Application.ExitThread() 方法非常簡單。通常,你會將該方法的呼叫放置在處理用戶操作或事件的處理常式中,以指示需要退出特定執行緒的情況。以下是一個基本的範例:

using System;
using System.Threading;
using System.Windows.Forms;

namespace MyWindowsApp {
  public partial class MainForm : Form {
    private Thread workerThread;

    public MainForm() {
      InitializeComponent();
    }

    private void startButton_Click(object sender, EventArgs e) {
      // Create and start a new thread
      workerThread = new Thread(WorkerMethod);
      workerThread.Start();
    }

    private void stopButton_Click(object sender, EventArgs e) {
      // Check if the workerThread is running
      if (workerThread != null && workerThread.IsAlive) {
        // Exit the workerThread gracefully
        System.Windows.Forms.Application.ExitThread(workerThread);
      }
    }

    private void WorkerMethod() {
      // Simulate work in the worker thread
      Thread.Sleep(5000);
    }
  }
}

在這個範例中,當點擊開始按鈕時,應用程式會啟動一個工作執行緒。按下停止按鈕會觸發 stopButton_Click 事件處理常式,該處理常式檢查工作執行緒是否正在執行,並且如果是,使用 Application.ExitThread(workerThread) 優雅地退出該執行緒。

結論

在這份全面的文章中,我們探討了各種退出 C# 應用程式的方法,每種方法都有不同的目的,並且可以對終止過程進行精確控制。

  • Environment.Exit():這個方法允許你使用退出碼終止整個應用程式,適用於指示成功或處理錯誤的情況。即使在出現意外錯誤或異常情況時,它也是確保清潔退出的多功能工具。
  • Application.Exit():主要用於Windows Forms應用程式,此方法有助於控制和優雅地退出。它允許在退出之前進行清理操作和事件處理,確保用戶友好的體驗和資源管理。
  • Application.ExitThread():在多線程應用程式中,此方法可讓您退出特定的線程,同時保持其他線程的運行。它保護應用程式的功能,防止資源洩漏,提供對線程終止的細粒度控制。
Muhammad Maisam Abbas avatar Muhammad Maisam Abbas avatar

Maisam is a highly skilled and motivated Data Scientist. He has over 4 years of experience with Python programming language. He loves solving complex problems and sharing his results on the internet.

LinkedIn

相關文章 - Csharp Console