多线程问题+ DataReady已经打开

时间:2012-09-26 08:42:34

标签: winforms multithreading ado.net datareader

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

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

表单中的DataGridView可以在运行时填充TB中的数据 必须在主线程上填充DataGridView,主线程是创建用户控件的线程 但填充DataTable时会抛出异常 异常消息通告用于从TB检索记录的Command上已打开DataReader。

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

1 个答案:

答案 0 :(得分:0)

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

网页包含以下信息:

  

请注意,当DataReader打开时,Connection正在使用中   完全由DataReader提供。您无法执行任何命令   Connection,包括创建另一个DataReader,直到   原始DataReader已关闭。

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