0

すべてのセルをループし、2 つの文字列 (SearchString と CellString) を比較して、datagridview 内で検索を実行しようとしています。

私は作業を 4 つのスレッドに分割し (各スレッドに処理する行の異なる 4 分の 1 を割り当てることにより)、並列に動作します。スレッドは異なる行をループするため、同じセルを同時に読み取ることはできません。そのため、エラーはないと思います。

各スレッドは次のことを行います。

   dim CellString as string
   For i As Integer = startrow To endrow

        For Each cell As DataGridViewCell In DataGridView.Rows(i).Cells

            CellString = cell.Value.ToString.ToLower ''Error appears here

            If cell.ColumnIndex <> 4 Then
                Select Case Compare(CellString, SearchString) ''complex function that compares 2 strings

                   ''....
                End Select
            End If
        Next
  Next

私が得るエラーは次のとおりです。

BindingSource を独自のデータ ソースにすることはできません。DataSource および DataMember プロパティを、BindingSource を参照する値に設定しないでください。

BindingSource も DataSource もいじらないので、なぜこれが起こるのかわかりません。また、更新は行わず、すべてのセルを文字列として読み取るだけです。

同様の問題が見つからなかったので、助けていただければ幸いです。

4

1 に答える 1

0

コード全体を見ないと、質問に正確に答えることは困難ですが、作成しているスレッドから UI (Datagridview が含まれる) のいくつかの要素にアクセスしようとしているという事実をすべて示しています。

Microsoft によると、これは合法ではありません。

設計上、フォームまたはコントロールを作成したスレッド以外のスレッドでは、Windows フォームまたはコントロールのメソッドを呼び出すことはできません。

詳細については、この記事を確認してください。同様の問題を解決するのに役立ちました。

于 2013-08-09T17:16:41.910 に答える