Trong WinForms tôi sử dụng:tương đương của System.Windows.Forms.Application.ThreadException cho ứng dụng hoặc cửa sổ dịch vụ điều khiển hoặc bất kỳ quá trình nói chung
- System.Windows.Forms.Application.ThreadException
- System. Windows.Application.UnhandledException
Tôi nên sử dụng gì cho ứng dụng đa luồng không phải Winforms?
Hãy xem xét các mã hoàn chỉnh dưới đây trong C# .NET 4.0: tấn
using System;
using System.Threading.Tasks;
namespace ExceptionFun
{
class Program
{
static void Main(string[] args)
{
AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler(CurrentDomain_UnhandledException);
Task.Factory.StartNew(() =>
{
throw new Exception("Oops, someone forgot to add a try/catch block");
});
}
static void CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e)
{
//never executed
Console.WriteLine("Logging fatal error");
}
}
}
Tôi đã thấy những câu hỏi tương tự như trên stackoverflow, nhưng không ai chứa một câu trả lời thỏa đáng. Hầu hết các câu trả lời đều thuộc loại: "Bạn nên bao gồm xử lý ngoại lệ thích hợp trong mã của bạn" hoặc "Sử dụng AppDomain.CurrentDomain.UnhandledException".
Chỉnh sửa: Có vẻ như câu hỏi của tôi đã bị hiểu lầm, vì vậy tôi đã sửa đổi nó và cung cấp một ví dụ mã nhỏ hơn.
này trông giống như một bản sao của http://stackoverflow.com/questions/3133199/net-global-exception-handler-in-console-application – Jodrell
Nói chung, một trình xử lý ngoại lệ toàn cục nên được sử dụng để đăng nhập. Bạn nên xử lý cục bộ nếu có một điều gì đó hợp lý bạn có thể làm về ngoại lệ. – Jodrell
Điều này sẽ hoạt động tốt. Tất nhiên bạn không muốn sử dụng try/catch, điều đó ngăn cản trình xử lý sự kiện UnhandledException chạy. Bạn không phải tự chăm sóc Die(), nó là tự động. –