1

我有一个执行大量数据库工作的 Winforms 应用程序。它做了很多读取和一些记录的插入。该操作最多可能需要 30 秒到一分钟,具体取决于数据库的大小。现在,我的程序运行良好。

我的问题是,当我的程序执行此操作时,我的 UI 线程被阻塞,直到数据库完成。我想将数据库函数放入一个线程中,但是,根据这篇 MSDN 文章,ADO.NET 不是线程安全的。

有没有办法在我的用户界面上提供进度条或以某种方式解决“ADO.NET 不是线程安全的”?也许要编写我自己的继承类SqlDataReaderSqlConnection使其成为线程安全的。这甚至可能吗?

4

1 回答 1

3

只需使用 backgroundworker 并确保每个线程 (bgw) 创建自己的 Connection 对象。

关于链接的文章,请确保您有一种并发安全的方式来生成密钥。让 Db 生成它们是最好的选择。

有没有办法在我的 UI 上提供进度条

这很棘手。Bgw 可以很好地报告进度,但从正在运行的查询中获取它是一个问题。甚至行的总 nr 通常也只有在最后才知道。
但是你总是可以伪造它,用户不介意/知道。

于 2012-09-19T21:05:45.230 回答