到目前为止,我只是Application.Run在Program.cs该程序的入口点周围放置了一个try / catch块。这样可以在调试模式下很好地捕获所有异常,但是当我在没有调试模式的情况下运行程序时,不再处理异常。我得到了未处理的异常框。
Application.Run
Program.cs
我不希望这种情况发生。我希望在非调试模式下运行时捕获所有异常。该程序有多个线程,最好所有线程中的所有异常都由同一处理程序捕获;我想在数据库中记录异常。有人对如何执行此操作有任何建议吗?
看一下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")) { ... }
为了防止在调试时捕获异常。