c# - 如何区分 BackgroundWorker.RunWorkerCompleted 事件处理程序中的不同异常类型

标签 c# .net exception exception-handling backgroundworker

我正在用 C# 做一些业余爱好项目,这是一种我不太了解的语言,并且偶然发现了以下内容:

假设您有一个使用 BackgroundWorker 实现的异步操作。现在,如果出现异常,将引发事件 RunWorkerCompleted 并且 RunWorkerCompletedEventArgs.Error 将为非空。

下面是处理不同异常类型的规范方法吗? (这里所有的异常种类都是兄弟WRT继承)

if (e.Error != null)
{
    FirstKindOfException e1 = e as OneKindOfException;
    SecondKindOfException e2 = e as SecondKindOfException;
    ...
    LastKindOfException en = e as LastKindOfException;
    if (e1 != null)
    {
        ...
    }
    else if (e2 != null)
    {
        ...
    }
    ...
    else
    {
        ...
    }
}

它有效,但是......感觉不对

最佳答案

您可以使用 is 来保持每个测试的严格范围:

if (e.Error is FirstKindOfException )
{
    ...
}
else if (e.Error is SecondKindOfException)
{
    ...
}

(如果你想从异常中得到特殊值,然后重新转换)

但老实说,我很少需要处理很多 不同类型的异常。在大多数情况下,只需恢复(补偿)到已知状态并适本地报告错误就可以了。一般来说,我更喜欢在开始操作之前测试可能的错误,所以异常确实是异常的东西。

关于c# - 如何区分 BackgroundWorker.RunWorkerCompleted 事件处理程序中的不同异常类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3881458/

相关文章:

java - 为什么这段代码中永远不会抛出 IOException

c# - 检查字符串中的无效字符?最聪明的方法?

c# - 更改禁用的组合框BackColor的功能是Bug还是功能?

.net - 在 NHibernate 上使用 QueryOver 限制 child 计数

.net - 我可以在 Visual Studio 2008 IDE 中使用 .net framework 4

php - Laravel 5 - 从包中添加异常渲染逻辑

spring-mvc - Spring Boot RestController,关于错误状态响应体,错误消息为空

c# - ToolStripDropDownButton,如何删除所有 DropDownItems?

c# - Redmon 的用户运行身份不加载用户的环境变量

c# - Windows Phone 8 应用程序的翻页过渡