「検索」というボタンをクリックすると入力されていた dataTable があります。このクリックで、dataTable にデータが入力されます。dataTable データで更新する新しいスレッドを作成しています。しかし、ユーザーは再び検索ボタンをクリックしました。スレッドが既にその dataTable を更新している間に、その dataTable が再び新しいデータで満たされるようになりました。[検索] をクリックすると、コードが再び新しいスレッドを作成し、変更された dataTable の更新を開始します。ここで、次のようなエラーが発生しています: クロススレッド操作が無効です: コントロール '' が作成されたスレッド以外のスレッドからアクセスされました。解決策を提案してください。ありがとう
質問する
1824 次
2 に答える
0
検索ボタンを割り当てることができます
btn.Enabled = false;
それをクリックしてメソッドを呼び出すと、検索が終了すると再度有効になります
ボタンを無効にしたくない場合は、このコードを使用できます
private BackgroundWorker trd;
private void button1_Click(object sender, EventArgs e)
{
if (trd != null)
{
trd.CancelAsync();
}
trd = new BackgroundWorker();
trd.DoWork += new DoWorkEventHandler(trd_DoWork);
trd.WorkerSupportsCancellation = true;
trd.RunWorkerAsync();
}
public void trd_DoWork(object sender, DoWorkEventArgs e)
{
// Your search code
}
そうすれば、スレッドを中止して再起動します。検索は途中で停止し、別のバックグラウンド ワーカーで値を編集しません。バックグラウンドワーカーは値を編集しています。これは、クロススレッドがないことを意味します。他のスレッドはわかりませんが、UI スレッドは UI を編集できます
于 2013-09-12T08:14:27.313 に答える