2013-06-25 2 views
0

У меня есть ProgressBar и таймер.C# ProgressBar неожиданные шаги

Я хочу показать ход 1 часа: увеличение 1/3600 каждую секунду.

Когда я запустил приложение, через 30 минут, прогресс-бит составляет около 100%. прогресс. Я ожидал, что это будет на 50% через 30 минут. Почему?

public Form1() 
    { 
     InitializeComponent(); 
     this.timer1.Tick += new EventHandler(timer1_Tick); 
     this.timer1.Interval = 1000; 
     this.timer1.Start(); 
    } 

    private void timer1_Tick(object sender, EventArgs e) 
    { 
     this.progressBar1.PerformStep(); 
    } 

-

 // 
     // progressBar1 
     // 
     this.progressBar1.Location = new System.Drawing.Point(12, 29); 
     this.progressBar1.MarqueeAnimationSpeed = 1000; 
     this.progressBar1.Maximum = 3600; 
     this.progressBar1.Name = "progressBar1"; 
     this.progressBar1.Size = new System.Drawing.Size(100, 23); 
     this.progressBar1.Step = 1; 
     this.progressBar1.TabIndex = 2; 
+2

таймеры не очень хороши для измерения времени, они очень неточны (см. Документы Microsoft по этому вопросу), вы должны установить 'DateTime startTime = DateTime.Now' при запуске таймера и использовать' (int) DateTime. Now.Subtract (startTime) .TotalSeconds' для панели progess – x4rf41

+0

@ x4rf41 ty для этого подсказки – DanFromGermany

+1

Является ли ваше событие Timer уже установленным в файле 'Designer.cs'? Если это так, он вызывает 'timer1_Tick()' дважды каждый тик – Jcl

ответ

5

Вы добавили таймер на панели инструментов и уже установлен обработчик события клещ. Таким образом, это фактически называется дважды.

+0

точно. такой изящный! – DanFromGermany