私の問題はこれです。私にはパネルが入ったフォームがあります。このパネルは、複数の異なるユーザーコントロールのコンテナとして機能し、一度に1つしか表示されません。上記のユーザーコントロールの中には、DBから多くのデータを表示するものがあるため、読み込みに時間がかかります(データはバインドされたデータグリッドビューで表示されます)。これらのコントロールのLoadDataメソッドを作成して別のスレッドで起動し、作業を終えたら、メインフォームの実際のボタンを有効にして表示しました。winformsと同時データ読み込み
しかし、多くの異なる問題がありました。まず、this.Invokeを呼び出すことはできません。ハンドルが作成されるまで、特に初期化中にスプラッシュ画面を表示したい場合は、ハンドルが作成されるまで押し込んでください(メインフォームのハンドルはまだ作成されていません)。
これを強制するには、form.Visible = trueを設定し、form.CreateControlを呼び出してからform.visible = falseを呼び出してください。しかし、これは画面上でフォームが点滅しているように見えますが、見栄えが良くありません。
ハンドルがまだ作成されていない場合でもInvokeを使用しないようにしましたが、データオブジェクトが別のスレッドで作成され、コントロールの「通常の」スレッドでアクセスできないという問題が発生します。
おそらくかなり明らかですが、マルチスレッドの場合は特に失われています。特にwinformsの場合、さらにはアプリケーションの起動時に失われます。私の説明もやや混乱するかもしれませんが、私はそれが必要かどうかを明らかにします。
これを行う正しい方法は何ですか?
データをロードしているときにユーザーがプログラムとやり取りできない場合は、スレッド内でデータのロードを移動するのは意味がありませんか? – Steve
データが少ないコントロールはスプラッシュ中にロードされ、すぐに利用できます。 – bobblez