我们正在公司开发WinForms应用程序 我们正面临一个线程问题。
线程TH在运行时开始时启动 TH从表TB中定期读取记录 DataTable用于检索记录 DataTable由SqlDataAdapter填充 一旦创建了对检索到的记录建模的对象,就会处理DataTable。
表单中的DataGridView可以在运行时填充TB中的数据 必须在主线程上填充DataGridView,主线程是创建用户控件的线程 但填充DataTable时会抛出异常 异常消息通告用于从TB检索记录的Command上已打开DataReader。
我试图在锁定块中包含在TH上执行的语句,但没有成功 我不习惯线程编程,所以我不知道我能做些什么来阻止例外 任何帮助将不胜感激。
答案 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上完成。