9

一連のフォームがあり、それらの間を移動します。

各フォームには、SQLite データベースからプロパティを読み込む一連のコントロールがあります。これは、フォームが徐々に描画されるため、ユーザーに最高の感覚を与えない長い (約 1 秒) 操作です。

遅延はあまり気にしませんが、すべてのデータがロードされたときにフォームを描画したいと思います。クロススレッド操作の問題が発生するため、新しいスレッドは避けたいと思います。

ロードされたデータをキャッシュしてアプリケーション全体を高速化する以外に、何か良い解決策はありますか?

4

5 に答える 5

8

多くのコントロール、特にリストビュー、リストボックス、コンボ ボックスなどのデータ集約型コントロールの知覚パフォーマンスを高速化する簡単な方法があります。

データを入力する前に BeginUpdate() メソッドを呼び出し、完了したら EndUpdate() を呼び出します。これにより、データの入力が完了するまで、コントロールの再描画が無効になります。

于 2009-03-26T11:24:01.907 に答える
2

ごめん。これがスレッド化の目的です。「クロススレッド操作の問題」は明確に定義されており、それらに対処するための一般的なパターンがあります。スレッドが相互作用する場所を最小限に減らすだけで (この場合、データがロードされた後、単一の場所になります)、簡単になります。

スレッド間の相互作用を抽象化するため、winforms アプリでのマルチスレッド化をより簡単にするいくつかのクラスもあります。BackgroundWorker (それに関するブログ投稿へのリンク) は、別のスレッドで作業を実行し、UI スレッドでイベントを発生させることによって作業が完了すると通知します。落とし穴なしでマルチスレッドの利点を得ることができます。

于 2009-03-26T11:30:15.183 に答える
1

コンボ ボックスやリストボックスなどの Winform コントロールを読み込むと、それらがテーブル自体ではなくビューを指している場合に、読み込みが大幅に速くなることがわかりました。テーブル全体。

于 2009-03-26T11:29:48.427 に答える
0

BackgroundWorker プロセスが役立つと思う限り、このリンクにはいくつかの優れた解決策があります。 http://devcomponents.com/blog/?p=361

于 2012-07-11T13:04:21.340 に答える
0

VB の時代に戻って、LockWindowUpdate API を使用しました。これはウィンドウ ハンドルを取るため、WinForms でも使用できるはずです。しかし、試したことはありません。

于 2009-03-26T10:59:25.210 に答える