1

私のアプリケーションはファイルを実行し、すべてのファイルには独自の実行時間があります。この関数は、進行時間を実行する時間をミリ秒単位で取得します。

timerProgress = my timer
pbStatus = my progress bar

public void AnimateProgBar(int milliSeconds)
{
    if (!timerProgress.Enabled && milliSeconds != 0)
    {
        pbStatus.Value = 0;;
        timerProgress.Interval = milliSeconds / 100;
        timerProgress.Enabled = true;
    }
}

これは進行状況バーを埋める私のタイマーです:

   private void timerProgress_Tick(object sender, EventArgs e)
    {
        if (pbStatus.Value < 100)
        {
            pbStatus.Value += 1;
            pbStatus.Refresh();
        }
        else
        {
            timerProgress.Enabled = false;
        }
    }

私の問題は、進行状況バーの実行が速すぎることです。たとえば、AnimateProgBar が 12000 (12 秒) の値を取得した場合、進行状況バーは 6 ~ 7 秒間しか実行されません。

4

3 に答える 3

0

問題を再現できませんでした。質問で詳しく説明したように、ProgressBar と Timer を使用して新しいフォームをテストしたところ、テストを開始するためのボタンを 1 つ追加し、経過時間を表示するためのラベルを 1 つ追加しただけです。

    DateTime start;
    private void button1_Click(object sender, EventArgs e)
    {
        start = DateTime.Now;
        AnimateProgBar(12000);
    }

    private void timer1_Tick(object sender, EventArgs e)
    {
        label1.Text = DateTime.Now.Subtract(start).TotalSeconds.ToString();
        //the rest of your code, starting with "if (pbStatus.Value < 100)"

プログレスバーがいっぱいになるまで一貫して12.6秒かかりました(そしてタイマーが停止し、ラベルテキストがフリーズしました).プログレスバーの一部が隠されている可能性がありますか?

[編集] BlackCap も気づいた余分な 0.6 秒に興味がある場合は、タイマー間隔を 120 ミリ秒に設定しているためですが、タイマー イベントの分解能は約 18 ミリ秒であるため、実際には代わりに 126 で発生します。 120の。

于 2013-04-21T12:09:58.423 に答える