2011-01-20 43 views
21

Tôi hiểu rằng có một số cách để thoát khỏi ứng dụng, chẳng hạn như Application.Exit(), Application.ExitThread(), Environment.Exit(), v.v.Cách chung để thoát khỏi ứng dụng .NET

Tôi có một thư viện "commons" bên ngoài, và tôi đang cố gắng tạo một phương thức FailIf chung để ghi nhật ký lỗi, thực hiện điều này và cái này và cái kia, rồi cuối cùng thoát khỏi ứng dụng ... đây là một phiên bản ngắn của nó.

public static void FailIf(Boolean fail, String message, Int32 exitCode = 1) 
    { 
     if (String.IsNullOrEmpty(message)) 
      throw new ArgumentNullException("message"); 

     if (fail) 
     { 
      //Do whatever I need to do 

      //Currently Environment.Exit(exitCode) 
      Environment.Exit(exitCode); 
     } 
    } 

Tôi đã đọc rằng việc sử dụng Environment.Exit không phải là cách tốt nhất để xử lý mọi thứ khi nói đến Winform ứng dụng, và cũng có khi làm việc với các ứng dụng WPF và Silverlight có nhiều cách khác nhau để thoát ... My câu hỏi thực sự là:

Tôi phải làm gì để thoát khỏi trang nhã để bao trả tất cả các loại ứng dụng?

+3

Bạn không thể chỉ đơn giản là ném một ngoại lệ thay vì làm những gì rõ ràng là một khẳng định? –

Trả lời

25

đọc này về sự khác biệt giữa việc sử dụng môi trường và ứng dụng:

Application.Exit Vs Environment.Exit

Có một ví dụ về những gì bạn muốn làm ở dưới cùng của trang đó:

if (System.Windows.Forms.Application.MessageLoop) 
{ 
    // Use this since we are a WinForms app 
    System.Windows.Forms.Application.Exit(); 
} 
else 
{ 
    // Use this since we are a console app 
    System.Environment.Exit(1); 
} 
+0

Tài khoản này có dành cho các ứng dụng WPF không? – michael

+0

Các ứng dụng WPF thường được bắt đầu bằng lệnh .Run() (Có) –

0

Tôi muốn giới thiệu sử dụng xử lý ngoại lệ cơ bản, vì vậy thay vì System.Environment.Exit (1) ném ApplicationException mới (tin nhắn) mà bong bóng ngoại lệ cho phương pháp chính, trong trường hợp của bạn một cái gì đó như thế này:

try{ 
Application.Run(new MyForm()); 
} 
catch(ApplicationException){ 
// do custom cleanup/reporting 
} 

Chỉ cần chắc chắn rằng bạn ném ngoại lệ từ các chủ đề chính, nếu không gọi vào nó trước khi ném ofcourse

+0

Một thời gian trước khi tôi làm việc cuối cùng với winforms vì vậy không chắc chắn các cuộc gọi có chính xác hay không nhưng bạn có ý tưởng ít nhất, cũng nhìn vào Excepion – Polity

2

Nếu nó chỉ là một hủy bỏ, sử dụng Environment.Exit(). Nếu nó là một cái gì đó rất quan trọng (mà không thể xử lý bất kỳ loại dọn dẹp), sử dụng Environment.FailFast().

Các vấn đề liên quan