作成中の WinForm アプリケーションで自分のコンボ ボックスを設定する際に問題があります。これらのコンボボックスに入力するために使用するデータは、データベースから取得されます。問題は、コンボ ボックスにバインドする必要があるデータが大量にあるため、このプロセスには非常に長い時間がかかり、その間アプリケーション全体がロックされます (データをバインドするプロセス全体は 9 秒以上かかりますが、データベースからデータをプルするのにかかる時間はわずか 400 ミリ秒です)。コントロールの作成(メインスレッド)とコンボボックスの作成(バックグラウンドワーカー)のプロセスを分割することで速度を上げようとしていますが、当然、クロススレッドエラーが発生します。これは私が使用するコードの一部です:
private void Populate()
{
comboBox1.BindingContext = new System.Windows.Forms.BindingContext();
comboBox1.DataSource = MyClass.dtMyDataTable;
comboBox1.DisplayMember = "TitleColumn";
.//I repeat the same code for each comboBox
.//I use the BiningContext because some of the comboBoxes have to display the
.//same data.
}
このフォームに必要なすべての DataTables を含むクラスを作成しました。データベースからの同じデータを使用するフォームが複数あるため、クラスを作成し、親 Form.Load( )、作成時に子フォームに渡します。このようにして、アプリケーションの読み込み時にデータを読み込みます (それほど時間はかかりません)。そのため、子フォームから呼び出したときにすぐに使用できるようになります。Populate()
メソッドからメソッドを呼び出そうとしましたbackgroundWorker.DoWork()
が、クロススレッドエラーが発生しました。
私の質問は-これを機能させる方法はありますか?そうでない場合は、代替ソリューションとして何を使用できますか?
ありがとうございました