我的WinForms应用程序使用BackgroundWorker个对象从数据库中检索信息.我使用BackgroundWorker是因为它允许用户界面在长时间运行的数据库查询期间保持畅通,并简化了线程模型.

我在一些后台线程中偶尔会遇到数据库异常,我在调试时在一个工作线程中至少看到过一个异常.我很有信心,这些例外情况都是超时,我认为这是合理的预期不时.

我的问题是,当这些后台工作线程之一中发生未处理的异常时会发生什么情况.

我不认为我可以在另一个线程中捕获异常,但我可以期望执行WorkerCompleted方法吗?我可以询问BackgroundWorker的任何属性或方法,以了解例外情况吗?

推荐答案

如果该操作引发代码无法处理的异常,BackgroundWorker将捕获该异常并将其传递到RunWorkerCompleted事件处理程序,在那里它将作为System.ComponentModel.RunWorkerCompletedEventArgs的错误属性公开.如果在Visual Studio调试器下运行,调试器将在引发未处理异常的DoWork事件处理程序中的某个点中断.

http://msdn.microsoft.com/en-us/library/system.componentmodel.backgroundworker.dowork.aspx

.net相关问答推荐

带有ASP.NET核心的Angular 项目模板.API试验

ECS服务无法从Cognito获取配置

当 Func 委托需要接口作为参数时,它是如何工作的?

是否有任何 x 次的 for 循环的更短/更简单的版本?

您是否使用 TestInitialize 或测试类构造函数来准备每个测试?为什么?

我可以使用 UriTemplate 将非字符串传递给 WCF RESTful 服务吗?

如何使用c#从excel文件中读取数据

数据库架构更改后更新 LINQ to SQL 类的最佳方法

DBNull 的意义何在?

Dapper 是否支持 SQL 2008 表值参数?

是否有可用的 WPF 备忘单?

在未安装 Visual Studio 的机器上使用 FUSLOGVW.EXE

什么是 C# 中的自动属性,它们的用途是什么?

当我们按下 Enter 键时启动的 WPF 文本框命令

让 String.Replace 只打整个单词的方法

实体框架中的 POCO 是什么?

DLL 中有什么以及它是如何工作的?

从字节数组中读取 C# 中的 C/C++ 数据 struct

.NET 中的 java.lang.IllegalStateException?

LINQ 可以与 IEnumerable 一起使用吗?