0

私の会社ではWinFormsアプリケーションを開発しています。
スレッドの問題に直面しています。

スレッドTHは、実行時の開始時に開始されます。
THは、テーブルTBからレコードを定期的に読み取ります。
DataTableは、レコードを取得するために使用されます。
DataTableはSqlDataAdapterによって埋められます。
DataTableは、取得したレコードをモデル化するオブジェクトが作成されるとすぐに破棄されます。

フォーム内のDataGridViewは、実行時にTBからのデータで埋められる可能性があります。
DataGridViewは、ユーザーコントロールが作成されるスレッドであるメインスレッドで入力する必要があります。
ただし、DataTableに入力すると例外がスローされます。
例外メッセージは、TBからレコードを取得するために使用されるコマンドでDataReaderがすでに開いていることを通知します。

THで実行されたステートメントをロックブロックで囲むことに成功しませんでした。
私はプログラミングのスレッド化に慣れていないので、例外を防ぐために何ができるかわかりません。
どんな助けでも大歓迎です。

4

1 に答える 1

0

この Web ページから有用な情報を入手しました: http://msdn.microsoft.com/en-us/library/haa3afyz(v=vs.80).aspx

Web ページには次の情報が含まれています。

DataReader が開いている間、Connection はその DataReader によって排他的に使用されることに注意してください。元の DataReader が閉じられるまで、別の DataReader の作成を含め、接続に対してコマンドを実行することはできません。

私の文脈では:
メインスレッドとスレッドTHでそれぞれ使用されるDataReadersは、同じ接続に対してselectコマンドを実行します。
SqlDataAdapter.Fill メソッドは、おそらく内部 DataReader を使用します。
スレッド TH で別の Fill メソッドの呼び出しがまだ完了していないときに、メイン スレッドで Fill メソッドの実行を試みることができます。

于 2012-09-27T07:59:53.467 に答える