DOBON.NET DOBON.NETプログラミング掲示板過去ログ

Progressbarのスピードの違い

環境/言語:[VB2005 OS:XP sp3/VISTA]
分類:[.NET]

XPとVISTAでVB2005を使っているのですが、XPとVISTAではProgressbarのスピードが違いますよね?

XPに合わせるとVISTAでは早くなってしまい、VISTAに合わせるとXPでは遅くなってしまう・・・

「XP VISUALスタイルを有効にする」を外すとGUIが古くさくなるし。

解決方法ありますか?
■No23909に返信(山広さんの記事)
> XPとVISTAでVB2005を使っているのですが、XPとVISTAではProgressbarのスピードが違いますよね?
>
> XPに合わせるとVISTAでは早くなってしまい、VISTAに合わせるとXPでは遅くなってしまう・・・
>
> 「XP VISUALスタイルを有効にする」を外すとGUIが古くさくなるし。
>
> 解決方法ありますか?

「Progressbarのスピード」というのがすでに伝わっていないように思います。
実際、自分には何のことかわかりません。
プログレスバーは勝手に増加するものではなく、自分で値を変更することによって
変化するものですよね。
だとしたらスピードという表現は何か違うような気がします。

まずはその「スピード」とやらの説明をしていただけませんか。
■No23910に返信(ぽぴ王子さんの記事)
> ■No23909に返信(山広さんの記事)
>>XPとVISTAでVB2005を使っているのですが、XPとVISTAではProgressbarのスピードが違いますよね?
>>
>>XPに合わせるとVISTAでは早くなってしまい、VISTAに合わせるとXPでは遅くなってしまう・・・
>>
>>「XP VISUALスタイルを有効にする」を外すとGUIが古くさくなるし。
>>
>>解決方法ありますか?
>
> 「Progressbarのスピード」というのがすでに伝わっていないように思います。
> 実際、自分には何のことかわかりません。
> プログレスバーは勝手に増加するものではなく、自分で値を変更することによって
> 変化するものですよね。
> だとしたらスピードという表現は何か違うような気がします。
>
> まずはその「スピード」とやらの説明をしていただけませんか。
確かに変な質問ですね。
スピードが変化するはずない。
入門書の購入を推奨します。
実際に同じプログラムで変わってしまうんです。


Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

Me.ProgressBar2.Minimum = 0
Me.ProgressBar2.Maximum = 80000
Me.ProgressBar2.Value = 0

End Sub




Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

Dim lungnum As Integer
For lungnum = 0 To 80000
ProgressBar2.Value = lungnum
Next
ProgressBar2.Value = 0

End Sub
■No23918に返信(山広さんの記事)
> 実際に同じプログラムで変わってしまうんです。

山広さん、こんばんは。

手元にVista環境がないので現象は確認しておりませんが、この様な書込みを
見つけましたので参考にされてみては如何でしょうか?

http://rararahp.cool.ne.jp/cgi-bin/lng/vc/vclng.cgi?print+200712/07120026.txt


あと…XPとVistaのマシンで単純にマシン性能が違っていて、処理速度に差が
生じていると言う事は有りませんよね(^^;

どちらにせよ、コンポーネントの性質上、処理の進捗率さえ正しく表されて
いれば更新速度は気にする必要はないと思うのですが…
2009/02/05(Thu) 06:25:50 編集(投稿者)

■No23918に返信(山広さんの記事)
> For lungnum = 0 To 80000
>  ProgressBar2.Value = lungnum
> Next

このコード自体が、あまり意味を持っていないような気をします。
ループの処理時間は CPU 性能などに依存しますので…。


そもそも ProgressBar で何を表現されたいのでしょうか?


もし、一定時間できっかり 0% → 100% に到達するような物――たとえば
「ラーメン タイマー」のようなもの――を想定しているのであれば、Timer を
貼っておき、その中で ProgressBar の Value を書き換えればよいと思います。
(イベント発生毎に経過時間を調べ、それを元に Value の値を決定します)


そうではなく、数秒以上の長い処理を抱えていて、その処理の進捗表示のために
ProgressBar を使いたいのであれば、提示されたサンプルのように、
Button1 の Click 内で処理すべきではありません。その場合には、
BackgroundWorker を使った方が良いでしょう。

 ' この中で長い処理を行う。
 ' ただしこの中では、ProgressBar を操作してはいけない。
 Sub BackgroundWorker1_DoWork(〜
  Dim bgw As BackgroundWorker = DirectCast(sender, BackgroundWorker)
  For lungnum As Integer = 0 To 80000
   Foo(lungnum) '何かの処理
   bgw.ReportProgress(0, lungnum) '処理状況を申告する
  Next
 End Sub

 ' 申告内容を受けて、現在の処理状況を ProgressBar に表示させる。
 ' ここでは、時間のかかる処理を記述しない事。
 Sub BackgroundWorker1_ProgressChanged(〜
  ProgressBar1.Value = CInt(e.userState)
 End Sub
■No23923に返信(魔界の仮面弁士さんの記事)
> 2009/02/05(Thu) 06:25:50 編集(投稿者)
>
> ■No23918に返信(山広さんの記事)
>>For lungnum = 0 To 80000
>> ProgressBar2.Value = lungnum
>>Next
>
> このコード自体が、あまり意味を持っていないような気をします。
> ループの処理時間は CPU 性能などに依存しますので…。
>
>
> そもそも ProgressBar で何を表現されたいのでしょうか?
>
>
> もし、一定時間できっかり 0% → 100% に到達するような物――たとえば
> 「ラーメン タイマー」のようなもの――を想定しているのであれば、Timer を
> 貼っておき、その中で ProgressBar の Value を書き換えればよいと思います。
> (イベント発生毎に経過時間を調べ、それを元に Value の値を決定します)
>
>
> そうではなく、数秒以上の長い処理を抱えていて、その処理の進捗表示のために
> ProgressBar を使いたいのであれば、提示されたサンプルのように、
> Button1 の Click 内で処理すべきではありません。その場合には、
> BackgroundWorker を使った方が良いでしょう。
>
>  ' この中で長い処理を行う。
>  ' ただしこの中では、ProgressBar を操作してはいけない。
>  Sub BackgroundWorker1_DoWork(〜
>   Dim bgw As BackgroundWorker = DirectCast(sender, BackgroundWorker)
>   For lungnum As Integer = 0 To 80000
>    Foo(lungnum) '何かの処理
>    bgw.ReportProgress(0, lungnum) '処理状況を申告する
>   Next
>  End Sub
>
>  ' 申告内容を受けて、現在の処理状況を ProgressBar に表示させる。
>  ' ここでは、時間のかかる処理を記述しない事。
>  Sub BackgroundWorker1_ProgressChanged(〜
>   ProgressBar1.Value = CInt(e.userState)
>  End Sub

山広さん>管理人に叱られました。
実は僕も入門者です。
単純にパソコンの性能の差ですよ。
コア1とコア2では転送処理が2倍もちがったりします。
10年前のパソと最新のパソでも処理速度が違います。
ALL高速言語とBasicミックスのプログラムでも処理速度は全然違います。
得に気にする事ではないと思います。
では。
どうもすみません。

ハードは一緒で、OSの違いだけで、こんなにも差があるものなのか?と考えたもので。

サンプルコードまで書いていただき有り難うございました。

非常に助かりました。

DOBON.NET | プログラミング道 | プログラミング掲示板