Assuming that your timer is System.Windows.Forms.Timer ;
var timerPeriods = new Timer();
timerPeriods.Interval = 1000;
timerPeriods.Tick += timerPeriods_Tick;
timerPeriods.Start();
progressBar1.Maximum = 2700;
void timerPeriods_Tick(object sender, EventArgs e)
{
var curTime = DateTime.Now.TimeOfDay;
var refTime1 = new TimeSpan(8, 0, 0);
var refTime2 = new TimeSpan(8, 45, 0);
if (curTime >= refTime1 && curTime <= refTime2)
{
var tsleft = refTime2.Subtract(curTime);
lblP1CountDown.Text = tsleft.ToString(@"hh\:mm\:ss");
progressBar1.Value++;
}
else
{
lblP1CountDown.Text = "Done";
(sender as Timer).Stop();
}
}
More generic way, if you start timer between time period not before refTime1 ;
var timerPeriods = new Timer();
timerPeriods.Interval = 1000;
timerPeriods.Tick += timerPeriods_Tick;
timerPeriods.Start();
progressBar1.Maximum = 100;
void timerPeriods_Tick(object sender, EventArgs e)
{
var curTime = DateTime.Now.TimeOfDay;
var refTime1 = new TimeSpan(8, 0, 0);
var refTime2 = new TimeSpan(8, 45, 0);
if (curTime >= refTime1 && curTime <= refTime2)
{
var tsleft = refTime2.Subtract(curTime);
lblP1CountDown.Text = tsleft.ToString(@"hh\:mm\:ss");
progressBar1.Value = 100 - (int)( tsleft.TotalSeconds * 100 /refTime2.Subtract(refTime1).TotalSeconds);
}
else
{
lblP1CountDown.Text = "Done";
(sender as Timer).Stop();
}
}