【发布时间】:2012-09-19 21:04:28
【问题描述】:
我有一个 Winforms 应用程序,它执行一些繁重的数据库工作。它做了很多读取和一些记录的插入。该操作最多可能需要 30 秒到一分钟,具体取决于数据库的大小。现在,我的程序运行良好。
我的问题是,当我的程序执行此操作时,我的 UI 线程被阻塞,直到数据库内容完成。我想把数据库函数放到一个线程中,但是,根据this MSDN article,ADO.NET 不是线程安全的。
有没有办法在我的 UI 上提供进度条或以某种方式解决“ADO.NET 不是线程安全的”?也许要编写我自己的继承SqlDataReader 或SqlConnection 的类以使其成为线程安全的。这甚至可能吗?
【问题讨论】:
-
哪个数据库? Access 的问题与 MS-SQL 不同。
-
@HenkHolterman -- 它实际上可以跨三个不同的数据库服务器工作,SQL Server 2000、Microsoft Access 和 MySQL。
-
这可能会使事情复杂化。您如何处理密钥,它们可以成为 GUID 吗?
-
Henk,我的 SQL Server 2000 数据库中的表是整数并且它们具有标识,因此 SQL Server 应该注意这一点。对于 MS Access 和 MySQL,我不会对它们进行 CRUD。仅 SELECT 查询。这是否更简化了事情?
-
是的,应该可以解决所有关键问题。
标签: c# sql-server winforms multithreading thread-safety