ファイル読込み(数万件)など重い処理を行う際に、プログレスバーを表示しているのですが、画面表示が重くて困っています。
たとえば、コモンダイアログでファイル名を指定し、(開くや保存)ボタンをクリック後に別のフォームでプログレスバーを表示します。
その際に、コモンダイアログの一部が画面から消えずに残ってしまいます。
ソースの書き方でうまくなりますでしょうか?
う〜ん・・・この辺の手法としては、マルチスレッド化が効果的なのですが、
VBですか? VB.NETですか?
VB.NETなら簡単に実現できますが・・・VB6の場合は、ホネかも
しれません・・・
要は、プログレスバーの描画時間と、他の画面更新の為のドローにCPUタイム
が割当られていない為、発生しているものだと思います。
コードの書き方で幾分かは改善できるとは思いますが、どんな書き方をされて
いるか解らないので、指摘のしようがありません・・・
以上。
プログレスバーの更新をファイル読み込みの1000件に一回位にして
DoEventsを入れたらどうでしょうか?
個人的には、WinAPIのGetTickCountかTimerで500msに一回とかにしています。
DB接続の場合、
接続中のダイアログをよく表示しますが、
メインのフォームがかくれず、微妙に残ります。
(はじめの質問と同じです)
このような場合もTimerとか使うのでしょうか?
ですね、時間が掛かる処理の場合DoEventsを定期的に呼ぶのはVBのお約束だと思います。(マルチタスク本来の考え方なら、プログレスバー等の更新だけでOSに制御が渡るべきなんですけどね)
ツイート | ![]() |