有没有办法在代码中的任何位置捕获展开的代码?我想要捕获异常并以类似的方式处理它们,而不是为每个功能编写try catch块。在Windows窗体应用程序中捕获应用程序异常
回答
在Windows窗体应用程序,当异常在应用程序中的任何位置抛出(在主线程或在异步调用),可以通过在该ThreadException事件注册抓住它应用。通过这种方式,您可以用相同的方式处理所有异常。
Application.ThreadException += new ThreadExceptionEventHandler(MyCommonExceptionHandlingMethod)
private static void MyCommonExceptionHandlingMethod(object sender, ThreadExceptionEventArgs t)
{
//Exception handling...
}
以防万一它可能帮助某人。请确保在运行应用程序(Application.Run(...);)之前注册到事件处理程序(Application.ThreadException + = ...)。否则,它将不起作用(正如它发生在我身上) – 2014-11-10 23:24:24
这回答了这个问题,但Brian Dishaw在他的回答中的链接非常全面,并且涵盖了所有(如果不是大多数)用例。在生产应用程序中唯一没用的方法是返回带有错误消息的对话框的方法。一个真正的生产应用程序将发送到事件日志,而不是在应用程序中弹出一个对话框。 – MacGyver 2016-02-01 16:08:10
显而易见的答案是将异常处理程序放在执行链的顶部。
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
try
{
Application.Run(new YourTopLevelForm());
}
catch
{
//Some last resort handler unware of the context of the actual exception
}
}
这将捕获您的主GUI线程上发生的任何异常。如果您还想全局捕获所有线程上发生的异常,您可以订阅AppDomain.UnhandledException事件并在那里处理。
Application.ThreadException +=
new ThreadExceptionEventHandler(MyCommonExceptionHandlingMethod)
private static void MyCommonExceptionHandlingMethod(
object sender,
ThreadExceptionEventArgs t)
{
//Exception handling...
}
现在到咨询复制...
这些选项只能作为最后的手段,比方说,如果要抑制意外捕获的异常从演示文稿到用户。只要有可能,当你知道有关异常情况的事情时,你应该尽快赶上。更好的是,你可以对这个问题做些什么。
结构化的异常处理可能看起来像一个不必要的开销,你可以解决所有的问题,但它存在,因为情况并非如此。更重要的是,这项工作应该在编写代码时完成,当开发人员拥有更新的逻辑时。不要懒惰,稍后离开这项工作,或让更多的专业开发人员拿起。
道歉,如果你已经知道并做到这一点。
参见AppDomain.UnhandledException
和Application.ThreadException
。
我认为这是一个接近,因为你可以得到你在寻找胜利形式的应用程序。
http://msdn.microsoft.com/en-us/library/ms157905.aspx
// 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);
没有做所有的运行有一些例外的风险,这些措施得到未处理。
这是我的主循环(我的应用程序开始隐藏,带有状态栏图标)。在您的代码中,我仍然需要在try/catch中包装新的Form1(); Application.Run();'... – doekman 2017-02-27 13:29:48
- 1. Windows窗体应用程序异常
- 2. 如何在c#中的Windows应用程序中捕获异常?
- 3. 在Windows窗体应用程序中捕获组合键事件
- 4. 异常窗体应用程序
- 5. Windows窗体应用程序
- 6. 如何在Windows登录异常窗体应用程序
- 7. Windows窗体应用程序中未处理的异常
- 8. 应用程序或应用程序是否应该捕获错误异常?
- 9. Windows窗体应用程序异常陷印
- 10. Windows窗体应用程序中的WCF
- 11. Windows窗体应用程序中的SQLException
- 12. Windows窗体应用程序中的Windows.Web.Http?
- 13. 添加应用程序配置为Windows窗体应用程序
- 14. 获取应用程序文件路径在Windows窗体应用程序
- 15. Windows窗体应用程序使用HTML
- 16. 如何在java fx应用程序中捕获任务异常?
- 17. 在Eclipse/Java应用程序中被捕获的异常通知
- 18. 如何在iPhone应用程序中捕获所有异常
- 19. 在JSF + EJB应用程序中捕获数据库异常
- 20. 在控制台应用程序中捕获异常C#
- 21. 不兼容Windows窗体应用程序
- 22. Mergesort C++ Windows窗体应用程序
- 23. C#Windows窗体应用程序关闭
- 24. Windows多窗体应用程序设计
- 25. 美化Windows窗体应用程序
- 26. 部署VB.NET Windows窗体应用程序
- 27. 调试Windows窗体应用程序
- 28. 带Web应用程序的Windows窗体
- 29. Windows窗体应用程序性能
- 30. WPF或Windows窗体应用程序
这不是你想要做的事情,而不是在本地处理,而是另外处理。看到可能的答案。 – Jodrell 2011-06-09 11:41:45