Durga
Durga

Reputation: 1303

How to display seconds using TimeSpan on Timer Tick Event

I am using below code to display time left in hh:mm:ss format for example if duration is 30min, it will show like this 00:30:00 and after 1 min it will show 00:29:00, how can i also display the remaining seconds and decrease them accordingly.,

Edit

I tried timer1.Interval = 1000; and
examTime = examTime.Subtract(TimeSpan.FromSeconds(1));

But its not showing me seconds reducing each second, How do i do it ?

        public SubjectExamStart()
        {
            InitializeComponent();

             examTime = TimeSpan.FromMinutes(double.Parse(conf[1]));
                    label1.Text = examTime.ToString();
                    timer1.Interval = 60 * 1000;
                    timer1.Start();
         }

        private void timer1_Tick(object sender, EventArgs e)
        {
            if (sender == timer1)
            {
                if (examTime.TotalMinutes > 0)
                {
                    examTime = examTime.Subtract(TimeSpan.FromMinutes(1));
                    label1.Text = examTime.ToString();
                }
                else
                {
                    timer1.Stop();
                    MessageBox.Show("Exam Time is Finished");
                }
            }
        }

Upvotes: 3

Views: 3888

Answers (3)

Tanmay Nehete
Tanmay Nehete

Reputation: 2198

try this hope this will work for u

set timer interval=1000

minremain=1200000; //Should be in milisecond
timerplurg.satrt();

 private void timerplurg_Tick(object sender, EventArgs e)
        {
      minremain = minremain - 1000; //substring One second from total time
            string Sec = string.Empty;
            if (minremain <= 0)
            {
                lblpurgingTimer.Text = "";
                timerplurg.Stop();
                return;
            }
            else
            {
        var timeSpan =   TimeSpan.FromMilliseconds(Convert.ToDouble(minremain));

                var seconds = timeSpan.Seconds;
                 if (seconds.ToString().Length.Equals(1))
                {
                    Sec = "0" + seconds.ToString();
                }
                else
                {
                    Sec = seconds.ToString();
                }

                string Totaltime = "Remaing Second: " + Sec;
                lblpurgingTimer.Text = Totaltime;
            }

Upvotes: 0

Rajeshkumar Kandhasamy
Rajeshkumar Kandhasamy

Reputation: 6461

Instead of Subtracting TimeSpan.FromMinutes you need to subtract from TimeSpan.FromSeconds

        public SubjectExamStart()
        {
            InitializeComponent();

             examTime = TimeSpan.FromSeconds(double.Parse(conf[1]));
                    label1.Text = examTime.ToString();
                    timer1.Interval = 1000;
                    timer1.Start();
         }

        private void timer1_Tick(object sender, EventArgs e)
        {
            if (sender == timer1)
            {
                if (examTime.TotalMinutes > 0)
                {
                    examTime = examTime.Subtract(TimeSpan.FromSeconds(1));
                    label1.Text = examTime.ToString();
                }
                else
                {
                    timer1.Stop();
                    MessageBox.Show("Exam Time is Finished");
                }
            }
        }

If you want to format the Time Span value while assigning to Label... You can use below..

label1.Text = examTime.ToString(@"dd\.hh\:mm\:ss");

Upvotes: 3

MoonKnight
MoonKnight

Reputation: 23833

To do this properly, you will need to keep a track of when the timer was started

DateTime examStartTime;
System.Windows.Forms.Timer runTimer;
TimeSpan totalExamTime = new TimeSpan(1, 30, 0); // Set exam time to 1 hour 30 minutes.

if (runTimer == null)
    runTimer = new System.Windows.Forms.Timer();
runTimer.Interval = 200;
runTimer.Tick -= new EventHandler(runTimerTick);
runTimer.Tick += new EventHandler(runTimerTick);
examStartTime = DateTime.Now;
runTimer.Start();

Then in the event handler you can do:

public void runTimerTick(object sender, EventArgs e)
{
    TimeSpan currentExamTime = DateTime.Now - examStartTime;
    if (currentExamTime > totalExamTime)
    {
        MessageBox.Show("Exam Time is Finished");
        runTimer.Stop();
        runTimer.Tick -= new EventHandler(runTimerTick);
        runTimer.Dispose();
    }
}

I hope this helps.

Upvotes: 3

Related Questions