- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
我目前正在编写我的第一个 Windows 窗体应用程序。我现在已经阅读了几本 C# 书籍,因此我对 C# 必须处理异常的语言功能有了相对较好的理解。然而,它们都非常理论化,所以我还没有了解如何在我的应用程序中将基本概念转化为良好的异常处理模型。
有人愿意分享关于这个主题的任何智慧明珠吗?发布您见过像我这样的新手所犯的任何常见错误,以及关于以一种使我的应用程序更加稳定和健壮的方式处理异常的任何一般建议。
我目前正在努力解决的主要问题是:
感谢收到所有建议!
最佳答案
还有一些……
您绝对应该有一个集中的异常处理策略。这可以像将 Main()
包装在 try/catch 中一样简单,快速失败并向用户显示优雅的错误消息。这是“不得已”的异常处理程序。
如果可行,先发制人的检查总是正确的,但并不总是完美的。例如,在您检查文件是否存在的代码和您打开它的下一行之间,该文件可能已被删除或其他一些问题可能会阻碍您的访问。在那个世界里你仍然需要 try/catch/finally。酌情使用先发制人检查和 try/catch/finally。
永远不要“吞下”异常,除非在最有据可查的情况下,当您绝对肯定地确定抛出的异常是可行的。这几乎永远不会是这种情况。 (如果是,请确保您只吞下特定异常类——永远不要吞下System.Exception
。)
构建库(由您的应用程序使用)时,不要吞下异常,也不要害怕让异常冒出来。除非你有一些有用的东西要添加,否则不要重新抛出。永远不要(在 C# 中)这样做:
throw ex;
因为您将删除调用堆栈。如果必须重新抛出(偶尔需要,比如使用Enterprise Library的Exception Handling Block时),使用如下:
throw;
归根结底,运行中的应用程序抛出的绝大多数异常都应该暴露在某个地方。它们不应该暴露给最终用户(因为它们通常包含专有或其他有值(value)的数据),而是通常记录下来,并通知管理员异常情况。可以向用户显示一个通用对话框,可能带有一个引用编号,以保持简单。
.NET 中的异常处理与其说是科学,不如说是一门艺术。每个人都会在这里分享自己的最爱。这些只是我从第一天开始使用 .NET 时学到的一些技巧,这些技巧不止一次救了我的命。您的里程可能会有所不同。
关于c# - Windows 窗体应用程序中异常处理的最佳实践?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/183589/
对于一个科学实验,我写了一个turtle.py ,它会打开一个 800x480 的窗口并绘制一个缓慢增长的黑点。 turtle.py以 C:\Users\kaza>python C:\Users\ka
我开发了一个 swing 应用程序,但每次运行应用程序时都会打开一个新窗口。我希望如果一个窗口已经打开,则其他窗口不允许打开。 最佳答案 Here是一个 Java 单一应用实例的例子: A singl
有没有办法检测主进程中 Electron 的结构? process.platform 似乎也在 x64 机器上返回 win32,我没有在文档中找到任何获取架构的选项。 最佳答案 你试过 process
public short[] HanningWindow(short[] signal_in ,int pos ,int size) { for (int i= pos; i < pos+si
我有一个具有这些属性的 Electron 窗口: mainWindow = new BrowserWindow({ width: 800, height: 600, title: "Aqu
我有一个 Ubuntu 工作站,我正在尝试引导一个 Windows 节点。 Windows 节点在端口 2222 上打开了 ssh。我一直在关注 http://docs.opscode.com/plu
我是一名优秀的程序员,十分优秀!