2

マルチスレッドを使用して DataGridView からデータを読み取ることは可能ですか? または他の方法はありますか?誰かが私に例や概念を教えてもらえますか?

行ごとに datagridview からデータを読み取りたい。そして、各行をパラメーターとしてメソッドに渡します。

これで私を助けてください...

4

3 に答える 3

1

データを読み取りますか? 基礎となるデータ ソースから読み取ってみませんか? おそらくデータテーブル。

あなたが試みているシナリオをより明確にすることができれば、より良い解決策を提供するのに役立ちます. データ テーブルはグリッドにバインドされているため、UI スレッド経由でアクセスする必要があります。

Task を使用したサンプル コードを次に示します。

 public Task<DataRow> ReadData(DataTable table, int rowId)
   {
       return Task<DataRow>.Factory.StartNew(() => table.Rows[rowId]);
   }

別のスレッドで実行されるため、この行にアクセスするには同期メカニズムが必要です。

于 2013-08-01T08:02:30.397 に答える
0

いいえ、メイン UI スレッド以外のスレッドでa DataGridView(または any )にアクセスすることは安全ではありません。Controlこれには、コントロールからのデータの読み取りが含まれます。これを安全に行うことはできません。

あなたがする必要があるのは、データを保持し、そこから読み取る別のデータ構造を維持することです。DataGridView を他のデータ構造と同期させておく必要があるため、余分な作業が必要になります。行をグリッドに手動で追加する場合は、簡単かもしれません。グリッドを (BindingListまたはその他を介して) データ バインドしている場合は、少しトリッキーになる可能性があります。

Contol.Invoke実際の読み取りは UI スレッドにマーシャリングされているため、関連するトリックは同時読み取り動作を実現しないことに注意してください。マルチスレッドの使用を完全に避けることもできます。ただし、できることは、UI スレッドでデータ行を個別に読み取り、それらのコピーを POCO データ構造に作成し、POCO オブジェクトを呼び出したいメソッドにシャトルして、Taskまたはワーカー スレッドを終了します。

于 2013-08-01T15:20:39.557 に答える