Member 12756603 Ответов: 1

Проблема с истекшим временем c# datetime


Я создаю секундомер, который отслеживает время, и при запуске накапливает время, затем при остановке ждет, а затем при запуске продолжает движение с предыдущей точки.

Моя проблема в том, что при нажатии кнопки "Пуск" она поднимается в текущее время и не возобновляется в остановленной точке.

Что я делаю не так?

using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace WedStop
{
    public class TimerLogic
    {
    
        
        private DateTime startTime;
        private DateTime stopTime;
        private bool hasStarted = false;
        private bool hasStopped = false;

        public String ElapsedTime
        {
           
            get
            {
                if (hasStopped)
                {

                    return (DateTime.Now - stopTime).ToString();  
                }
                if (hasStarted) // good old code
                {                      
                    return (DateTime.Now - startTime).ToString();                    
                }
                return "00 HR:00 MN:00 SEC";
                }
        }
   

        public void StartClock()
        {
                if (hasStopped == false)
                { 
                   hasStarted = true; 
                   startTime = DateTime.Now; 
                }

                if (hasStopped == true)
                {
                    
                    hasStopped = true;
                }
                
                
        }

        public void StopClock() 
        {
            
            stopTime = startTime;
            hasStopped = true;
            hasStarted = false;
            
        }
    }
}


using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace WedStop
{
    public partial class Form1 : Form
    {
        TimerLogic stopWatch = new TimerLogic();

        public Form1()
        {
            InitializeComponent();
        }

        private void timer1_Tick(object sender, EventArgs e)
        {
            lblDisplay.Text = stopWatch.ElapsedTime;
        }

        private void Form1_Load(object sender, EventArgs e)
        {

        }

        private void btnStart_Click(object sender, EventArgs e)
        {
            
            stopWatch.StartClock();
            timer1.Start();
        }

        private void btnStop_Click(object sender, EventArgs e)
        {
            timer1.Stop();
            stopWatch.StopClock();
            
          
        }
    }
}


Что я уже пробовал:

Я думаю, что проблема заключается в классе логики таймера с этой строкой кода:

return (DateTime.Now - stopTime).ToString();

Ehsan Sajjad

почему бы не использовать класс секундомера, предоставленный компанией .Сетевая структура?

[no name]

"эта строка кода", я так не думаю. Вы должны научиться использовать отладчик раньше, чем вчера. Тогда вы бы знали, какая строка кода является виновником, а не просто гадали.

1 Ответов

Рейтинг:
0

Ehsan Sajjad

Вы можете использовать предоставленный фреймворком класс секундомера, но если вы пытаетесь изучить и реализовать свой собственный секундомер, то ваша ошибка на самом деле заключается в том, что вы сами указали, что вам нужно держать :

var difference = DateTime.Now - stopTime;
return String.Format("{0} HR:{1} MN:{2} SEC", diff.Hours,diff.Minutes,diff.Seconds));