C# · 12月 26, 2021

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 appif (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!

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