我发现几个C#应用程序崩溃响应错误条件,如obj = null或obj.member = null.很多时间,obj从3rdPartyApp的界面.
并导致3rdPartyApp和MyCsApp一起崩溃.
并导致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!
希望这可以帮助,最好的祝福,汤姆.