4

現在、Load イベント ハンドラーでデータベースからいくつかのものを取得しているため、開くのに少し時間がかかるフォームがいくつかあります。

どうにかしてフォームを別のスレッドにロードし、それが完了したときにユーザーに表示することは可能ですか?

Load イベント ハンドラーが起動されるようにそれらをロードすることができない場合は、IPreloadableインターフェイスを使用してメソッドでトリックを実行し、Preload読み込みの遅いコンテンツをそのメソッドに移動することができます。別のスレッドからフォームを表示できる場合は... Invoke などを使用する必要があると思いますか?

4

1 に答える 1

2

異なるスレッドに異なるフォームをロードする場合、フォーム間で呼び出しを行うときは非常に注意する必要があります -あらゆる場所でControl.Invoke/を使用する必要があります。BeginInvoke

各トップ レベルウィンドウは異なるスレッドで実行できますが、ウィンドウ内のすべてのコントロールは、そのウィンドウのスレッドで作成する必要があります (または、ハンドルを作成する必要があります)。

データベース情報をバックグラウンドでロードし、それが完了たら、実際のフォームを作成して表示できます。(それまでは、待機カーソルに変更するか、「データを読み込んでいます...」というステータス メッセージをどこかに配置することをお勧めします。

于 2009-09-07T18:46:26.893 に答える