微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

c# – 如何吞下所有的异常并保护我的应用程序不会崩溃?

我发现几个C#应用程序崩溃响应错误条件,如obj = null或obj.member = null.很多时间,obj从3rdPartyApp的界面.
并导致3rdPartyApp和MyCsApp一起崩溃.

如何在所有可能的区域添加异常处理,以便我的应用程序能够在这些灾难性的情况下生存下去?将try-catch添加到所有地方是一个挑战,并从情况中恢复.

如何以现实,可靠和防弹的方式实现这一目标?

[更新:行业自动化控制]

结构体:

GUI(asp.net,c) – RuntimeApp(C) – MyCsApp(cs) – 3rdPartyApp(Cs)

正常程序:

> HostApp – (通过以太网Cabele连接) –
MyCsApp
>运算符 – GUI – RuntimeApp –
MyCsApp

异常情况:

>一些非标准操作程序;
>发生了一些硬件问题;
>等

我最好处理所有的异常情况.
最重要的是,我必须考虑如何从情况中恢复.

解决方法

首先治愈这种疾病是有意义的,找出为什么会导致崩溃,确保代码由于obj = null或类似而崩溃 – 使用异常处理和吞咽所有异常只是掩盖了问题….这就是它不用于!听起来好像有很多的代码气味触发了崩溃 – 保护你的应用程序免于崩溃不是正确的方法来处理它,只是使事情变得更糟?

好的,你可以按照John Saunders和pm100的建议来做,但是以一种方式来处理它,看看是什么根本原因,不要把它当作一个“魔法银弹”,在一天结束时,代码与第三方应用程序交互需要彻底调试…

例如

object foo = null;
bar baz;

// ....
// foo is Now set by thirdparty app

if (foo != null && foo is bar)  baz = (bar)foo as bar;

if (baz != null){

  // Continue on,baz is a legitimate instance of type 'bar'

}else{

  // Handle it gracefully or throw a *user defined exception*

}

注意’as’如何用于检查’foo’是否为’bar’实例的正确类型 – 现在与此进行比较,这是一个典型的代码气味…

object foo = null;
bar baz;

// foo is Now set by thirdparty app - ARE YOU REALLY SURE ITS NON-NULL?
// IS IT REALLY OF TYPE 'BAR'?

baz = foo; // CRASH! BANG! WALLOP! KERruncH!

希望这可以帮助,最好的祝福,汤姆.

原文地址:https://www.jb51.cc/csharp/92960.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐