画面の切り替えをスムーズにするには?


だいあろぐ  2003-10-14 18:52:03  No: 109107  IP: [192.*.*.*]

ファイル読込み(数万件)など重い処理を行う際に、プログレスバーを表示しているのですが、画面表示が重くて困っています。
たとえば、コモンダイアログでファイル名を指定し、(開くや保存)ボタンをクリック後に別のフォームでプログレスバーを表示します。
その際に、コモンダイアログの一部が画面から消えずに残ってしまいます。

ソースの書き方でうまくなりますでしょうか?

編集 削除
岡田 之仁  2003-10-14 18:58:04  No: 109108  IP: [192.*.*.*]

う〜ん・・・この辺の手法としては、マルチスレッド化が効果的なのですが、
VBですか?  VB.NETですか?

VB.NETなら簡単に実現できますが・・・VB6の場合は、ホネかも
しれません・・・

要は、プログレスバーの描画時間と、他の画面更新の為のドローにCPUタイム
が割当られていない為、発生しているものだと思います。

コードの書き方で幾分かは改善できるとは思いますが、どんな書き方をされて
いるか解らないので、指摘のしようがありません・・・

以上。

編集 削除
ねろ  2003-10-14 22:39:37  No: 109109  IP: [192.*.*.*]

プログレスバーの更新をファイル読み込みの1000件に一回位にして
DoEventsを入れたらどうでしょうか?

編集 削除
いちゆ  2003-10-15 09:01:50  No: 109110  IP: [192.*.*.*]

個人的には、WinAPIのGetTickCountかTimerで500msに一回とかにしています。

編集 削除
だいあろぐ  2003-10-21 14:29:20  No: 109111  IP: [192.*.*.*]

DB接続の場合、
接続中のダイアログをよく表示しますが、
メインのフォームがかくれず、微妙に残ります。
(はじめの質問と同じです)
このような場合もTimerとか使うのでしょうか?

編集 削除
ファン太  2003-10-22 13:17:46  No: 109112  IP: [192.*.*.*]

ですね、時間が掛かる処理の場合DoEventsを定期的に呼ぶのはVBのお約束だと思います。(マルチタスク本来の考え方なら、プログレスバー等の更新だけでOSに制御が渡るべきなんですけどね)

編集 削除