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连接) – 异常情况: >一些非标准操作程序; 我最好处理所有的异常情况. 解决方法
首先治愈这种疾病是有意义的,找出为什么会导致崩溃,确保代码由于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! 希望这可以帮助,最好的祝福,汤姆. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |