小编Joe*_*oey的帖子

全局捕获WPF应用程序中的异常?

我们有一个WPF应用程序,其中部分可能会在运行时抛出异常.我想全局捕获任何未处理的异常并记录它们,但是否则会继续执行程序,好像什么也没发生(有点像VB On Error Resume Next).

这可能在C#中吗?如果是这样,我究竟需要将异常处理代码放在哪里?

目前我看不到任何可以包装a try/ catcharound的单点,哪些可以捕获可能发生的所有异常.即便如此,由于捕获,我会留下任何被执行的东西.或者我在这里想到可怕的错误方向?

ETA:因为下面有很多人指出:该申请不是用于控制核电厂.如果它崩溃了并不是什么大问题,但是大多数与UI相关的随机异常在它将被使用的上下文中是一种麻烦.有(也可能仍然是)其中一些,因为它使用插件架构,可能会被其他人扩展(在这种情况下也是学生;所以没有经验丰富的开发人员能够编写完全无错误的代码).

至于被捕获的异常:我将它们记录到日志文件中,包括完整的堆栈跟踪.这就是这项工作的重点.只是为了对抗那些在字面上对VB的OERN进行类比的人.

我知道盲目忽略某些类错误是危险的,可能会破坏我的应用程序实例.如前所述,这个程序对任何人来说都不是关键任务.在他们正确的思想中没有人会打赌人类文明的存在.它只是一个用于测试某些设计方法的小工具.软件工程.

为了立即使用该应用程序,异常可能会发生很多事情:

  • 没有异常处理 - 错误对话框和应用程序退出.必须重复实验,尽管可能与另一个主题有关.没有记录任何错误,这是不幸的.
  • 通用异常处理 - 良性错误被困,没有造成伤害.这应该是我们在开发过程中看到的所有错误判断的常见情况.忽视这种错误不应该立即产生后果; 核心数据结构经过充分测试,可以轻松应对.
  • 通用异常处理 - 严重错误被捕获,可能在以后崩溃.这可能很少发生.到目前为止我们从未见过它.无论如何都会记录错误,崩溃可能是不可避免的.所以这在概念上类似于第一种情况.除了我们有一个堆栈跟踪.在大多数情况下,用户甚至都不会注意到.

对于程序生成的实验数据:严重错误最坏的情况是不会导致数据被记录.稍微改变实验结果的微妙变化是不太可能的.即使在这种情况下,如果结果看起来很可疑,则会记录错误; 如果它是一个完整的异常值,那么仍然可以丢弃该数据点.

总结一下:是的,我认为自己仍然至少部分理智,我不认为一个全局异常处理例程让程序运行必然是完全邪恶的.如前所述,根据申请,这样的决定可能是有效的.在这种情况下,它被认为是一个有效的决定,而不是完全和彻底的废话.对于任何其他应用程序,决策可能看起来不同 但请不要因为我们忽视错误而指责我或其他从事该项目的人可能会炸毁这个世界.

附注:该应用程序只有一个用户.数百万人使用的不是像Windows或Office这样的东西,在这种情况下,向用户提供异常泡沫的成本本来就是非常不同的.

c# wpf exception-handling exception

228
推荐指数
4
解决办法
10万
查看次数

如何在第一个错误上停止PowerShell脚本?

我希望我的PowerShell脚本在我运行的任何命令失败时停止(例如set -e在bash中).我正在使用Powershell命令(New-Object System.Net.WebClient)和程序(.\setup.exe).

windows powershell

226
推荐指数
8
解决办法
13万
查看次数

从WPF应用程序获取应用程序的目录

我找到了带有AppDomain的Windows窗体的解决方案,但是WPF Application对象的等价物是什么?

.net c# wpf

163
推荐指数
4
解决办法
18万
查看次数

从cmd.exe设置持久环境变量

我必须在不同的Windows机器上设置环境变量,但我不想通过访问"我的电脑"的属性屏幕来手动更改它们

我想从命令行使用批处理文件.据我所知,使用set只会更改我将在命令窗口中调用的进程的变量.

我想明确地设置它,所以稍后,当运行一个新进程时,它将使用我设置的那些新设置.有没有办法从命令行执行此操作?

windows cmd batch-file environment-variables

110
推荐指数
3
解决办法
12万
查看次数

为什么大对象堆和我们为什么关心?

我读过有关Generations和Large object heap的内容.但我仍然不明白拥有大型对象堆的意义(或好处)是什么?

如果CLR只是依赖于第2代(考虑到Gen0和Gen1的阈值很小来处理大型对象)来存储大型对象,那么可能出现什么问题(在性能或内存方面)?

.net clr garbage-collection large-object-heap

96
推荐指数
4
解决办法
4万
查看次数

批处理文件包含变量的外部文件

我有一个批处理文件,我想包含一些包含一些变量的外部文件(比如配置变量).可能吗?

batch-file

88
推荐指数
2
解决办法
12万
查看次数

理解Java中的$格式字符串

 StringBuilder sb = new StringBuilder();
 // Send all output to the Appendable object sb
 Formatter formatter = new Formatter(sb, Locale.US);

 // Explicit argument indices may be used to re-order output.
 formatter.format("%4$2s %3$2s %2$2s %1$2s", "a", "b", "c", "d")
 // -> " d  c  b  a"
Run Code Online (Sandbox Code Playgroud)

在这种情况下,为什么2附加到$?

java formatter

76
推荐指数
2
解决办法
4万
查看次数

如何编写接受管道输入的PowerShell脚本?

我正在尝试编写一个可以获得管道输入的PowerShell脚本(并且预计会这样做),但尝试类似的东西

ForEach-Object {
   # do something
}
Run Code Online (Sandbox Code Playgroud)

在使用命令行中的脚本时实际上不起作用,如下所示:

1..20 | .\test.ps1
Run Code Online (Sandbox Code Playgroud)

有办法吗?

注意:我了解功能和过滤器.这不是我想要的.

powershell

75
推荐指数
4
解决办法
9万
查看次数

我应该在C#中使用uint来获取不能为负的值吗?

我刚才想实现一类其中有大量的长/计数性能等方面都uint代替int.然而,在这样做的同时,我注意到这样做真的很痛苦,就好像没有人真的想要那样做.

几乎所有提出整数类型的东西都会返回int,因此需要在几个点上进行转换.我想构建一个StringBuffer缓冲区长度默认为该类中的一个字段.也需要演员.

所以我想知道我是否应该回到int这里.无论如何,我当然不会使用整个范围.我只是想,因为我在那里处理的根本不能是负面的(如果它是,这是一个错误)实际使用它是一个好主意uint.

PS:我看到了这个问题,这至少解释了为什么框架本身总是使用,int但即使在自己的代码中,它实际上很难坚持,uint这让我觉得它显然不是真正想要的.

c# integer

75
推荐指数
2
解决办法
1万
查看次数

在Java中捕获Ctrl + C.

是否有可能在java命令行应用程序中捕获Ctrl+ C信号?我想在终止程序之前清理一些资源.

java command-line control-c

73
推荐指数
3
解决办法
6万
查看次数