0

我们正在我的公司开发一个 WinForms 应用程序。
我们正面临线程问题。

线程 TH 在运行时开始时启动。
TH 定期从表 TB 中读取一条记录。
DataTable 用于检索记录。
DataTable 由 SqlDataAdapter 填充。
一旦创建了对检索记录进行建模的对象,就会释放 DataTable。

Form 中的 DataGridView 可以在运行时填充来自 TB 的数据。
DataGridView 必须在主线程上填充,主线程是创建用户控件的线程。
但是在填充 DataTable 时会引发异常。
异常消息表明 DataReader 已在用于从 TB 检索记录的命令上打开。

我尝试在锁块中包围在 TH 上执行的语句,但没有成功。
我不习惯线程编程,所以我不知道我能做些什么来防止异常。
任何帮助将不胜感激。

4

1 回答 1

0

我从这个网页获得了有用的信息:http: //msdn.microsoft.com/en-us/library/haa3afyz (v=vs.80).aspx

该网页包含以下信息:

请注意,当 DataReader 打开时,Connection 由该 DataReader 独占使用。在关闭原始 DataReader 之前,您无法为 Connection 执行任何命令,包括创建另一个 DataReader。

在我的上下文中:
分别在主线程和线程 TH 上使用的 DataReader 为同一连接执行选择命令。
SqlDataAdapter.Fill 方法可能使用内部 DataReader。
可以在主线程上尝试执行 Fill 方法,而另一个对 Fill 方法的调用尚未在线程 TH 上完成。

于 2012-09-27T07:59:53.467 回答