2009-06-26 26 views
7

Tôi có ứng dụng đơn giản với AppDomain duy nhất được định kỳ đưa ra trên một máy chủ. Đôi khi ngoại lệ unhandled xảy ra trong aplication và mặc định hủy bỏ/thử lại/bỏ qua hộp thoại bật lên. Tôi cần phải bằng cách nào đó ngăn chặn edialog hiển thị và chỉ xuất ra ngoại lệ trên StrErr và đóng ứng dụng. Vì vậy, tôi kèm theo tất cả các mã trong phương thức chính với câu lệnh try-catch, nhưng nó không giúp gì cả - hộp thoại ngoại lệ vẫn được hiển thị đôi khi.C# console ứng dụng - ngăn chặn hộp thoại ngoại lệ mặc định

Các Main() mã trông như thế này:

try 
{ 
    RunApplication(); 
} 
catch (Exception exc) 
{ 
    Console.Error.WriteLine(exc.ToString()); 
    Console.Error.WriteLine(exc.StackTrace); 
    if (exc.InnerException != null) 
    { 
     Console.Error.WriteLine(exc.InnerException.ToString()); 
     Console.Error.WriteLine(exc.InnerException.StackTrace); 
    } 
    Environment.Exit(666); 
} 

này try-catch khoản shoud bắt tất cả các trường hợp ngoại lệ unhandled và hộp thoại ngoại lệ không bao giờ nên bật lên AFAIK. Tui bỏ lỡ điều gì vậy? Hoặc là có bất kỳ thiết lập (đăng ký vv) trên máy chủ mà kiểm soát một số hành vi đặc biệt liên quan đến hộp thoại ngoại lệ/ứng dụng mã lỗi?

+0

Bạn đang nói về việc đột nhập vào các ngoại lệ chưa được giải quyết? – abhilash

Trả lời

20

Có sự kiện ngoại lệ không được xử lý mà bạn có thể đăng ký trong miền ứng dụng.

public static void Main() 
    { 
     AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler(OnUnhandledException); 

     //some code here.... 
    } 

    /// <summary> 
    /// Occurs when you have an unhandled exception 
    /// </summary> 
    public static void OnUnhandledException(object sender, UnhandledExceptionEventArgs e) 
    { 
     //here's how you get the exception 
     Exception exception = (Exception)e.ExceptionObject; 

     //bail out in a tidy way and perform your logging 
    } 
+0

Chết tiệt, quá chậm. ;-) –

+1

Tôi đã gõ điên cuồng, lol :-) –

+0

Tôi không thực hiện bất kỳ công việc nào với appdomain trước đây, tôi chỉ biết các ứng dụng của mình thực hiện bên trong một ... Mã này có bắt ngoại lệ phát sinh từ các luồng khác nhau không? –

0

Bạn có cho rằng khả năng khoản bắt của bạn có thể là ngoại lệ không? Bạn có tạo ra các chủ đề trong ứng dụng chính của mình không?

+1

không có chủ đề nào khác - chỉ là chủ đề chính. Khả năng duy nhất mệnh đề catch sẽ tăng ngoại lệ mà tôi có thể thấy bây giờ là khi exc.StackTrace == null. – Buthrakaur

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