一尘不染

如何制作可捕获WinForms应用程序中所有“未处理”异常的东西?

c#

到目前为止,我只是Application.RunProgram.cs该程序的入口点周围放置了一个try /
catch块。这样可以在调试模式下很好地捕获所有异常,但是当我在没有调试模式的情况下运行程序时,不再处理异常。我得到了未处理的异常框。

我不希望这种情况发生。我希望在非调试模式下运行时捕获所有异常。该程序有多个线程,最好所有线程中的所有异常都由同一处理程序捕获;我想在数据库中记录异常。有人对如何执行此操作有任何建议吗?


阅读 284

收藏
2020-05-19

共1个答案

一尘不染

看一下ThreadException文档中的示例:

public static void Main(string[] args)
{
   // Add the event handler for handling UI thread exceptions to the event.
    Application.ThreadException += new     
  ThreadExceptionEventHandler(ErrorHandlerForm.Form1_UIThreadException);

  // Set the unhandled exception mode to force all Windows Forms errors
  // to go through our handler.
  Application.SetUnhandledExceptionMode(UnhandledExceptionMode.CatchException);

  // Add the event handler for handling non-UI thread exceptions to the event. 
  AppDomain.CurrentDomain.UnhandledException += new       
  UnhandledExceptionEventHandler(CurrentDomain_UnhandledException);
}

您可能还希望在调试时不捕获异常,因为这使调试更加容易。这有点骇人听闻,但是为此,您可以使用

 if (!AppDomain.CurrentDomain.FriendlyName.EndsWith("vshost.exe")) { ... }

为了防止在调试时捕获异常。

2020-05-19