BackgroundWorker で動作させるのに問題があります。
クリックすると BackgroundWorkers RunWorkerAsync メソッドを呼び出したいチェックボックスがあります。
private void checkBoxLoadRecords_CheckedChanged(object sender, EventArgs e)
{
bw.RunWorkerAsync();
}
DoWork イベント内で、コンボの 1 つで SelectionChangeCommitted イベントを呼び出します。
void bw_DoWork(object sender, DoWorkEventArgs e)
{
comboSelectedIDs_SelectionChangeCommitted(sender, e);
}
SelectionChangeCommitted メソッド内で、ID を変数に取得しようとした最初の行でエラーが発生します。私が受け取ったエラーは次のとおりです:クロススレッド操作が無効です:コントロール 'comboSelectedIDs' は、それが作成されたスレッド以外のスレッドからアクセスされました。
void comboSelectedIDs_SelectionChangeCommitted(object sender, EventArgs e)
{
int idToUse = (int)multiSelectedIDs.SelectedValue; //Errors here!
SetupNamesCombo(idToUse);
}
この問題を回避するにはどうすればよいですか?
カスタムコントロールを使用すると、コンボテキスト値を使用するため、同様の問題が発生すると思います。これを BackgroundWorker で取得したいと考えています。
私はC#4.0を使用しています
前もって感謝します。