Время истекло / секундомер - PullRequest
2 голосов
/ 05 июля 2011

Я хочу создать приложение ASP.NET WinForms, которое отслеживает время выполнения задачи. Мне нужно иметь возможность написать форму, чтобы я мог добавить задачу в базу данных, открыть ее на новой вкладке и иметь возможность запускать, приостанавливать и останавливать задачу. Когда я закончу, мне нужно рассчитать время, необходимое для выполнения задачи. Я хотел бы увидеть на странице запущенный секундомер, показывающий часы: мин: сек, обновляющиеся каждую секунду через AJAX. Я уже посмотрел в Интернете TimeSpan, DateTime, StopWatch и т. Д., И я не могу найти ничего, что работает для меня. Я начал с простой формы с кнопками запуска и остановки. Событие _click для кнопки «Пуск» назначает мою переменную DateTime «startTime = DateTime.Now», а событие «_click» для кнопки «Стоп» назначает мою переменную DateTime «endTime = DateTime.Now». Затем я использую TimeSpan 'elapsed' для вычисления TimeSpan 'elapsed = (endTime - startTime). Когда я обновляю метку, чтобы показать истекшее время, я ожидаю получить только те секунды, которые прошли, но я получаю всю строку DateTime. Ниже мой код:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Diagnostics;

namespace CS_StopWatch
{
    public partial class Default : System.Web.UI.Page
    {
        //public Stopwatch myStopWatch = new Stopwatch();
        public DateTime startTime;
        public DateTime endTime;
        public TimeSpan ts_timeElapsed;
        public string s_timeElapsed;
        protected void Page_Load(object sender, EventArgs e)
        {

        }

        protected void StartButton_Click(object sender, EventArgs e)
        {
            //myStopWatch.Start();
            startTime = DateTime.Now;
        }

        protected void StopButton_Click(object sender, EventArgs e)
        {
            //myStopWatch.Stop();
            //ElapsedLabel.Text = "Time Elapsed: " + myStopWatch.Elapsed;
            endTime = DateTime.Now;
            ts_timeElapsed = (endTime - startTime);
            s_timeElapsed = GetElapsedTimeString();
            ElapsedLabel.Text = "Time Elapsed: " + s_timeElapsed;
        }

        public string GetElapsedTimeString()
        {
            int days = ts_timeElapsed.Days;
            double hours = ts_timeElapsed.Hours;
            double mins = ts_timeElapsed.Minutes;
            double secs = ts_timeElapsed.Seconds;
            string x = "";
            if (days != 0)
            {
                x += days.ToString() + ":";
            }
            if (hours != 0)
            {
                x += hours.ToString() + ":";
            }
            if (mins != 0)
            {
                x += mins.ToString() + ":";
            }
            if (secs != 0)
            {
                x += secs.ToString();
            }

            return x;
        }
    }
}

1 Ответ

2 голосов
/ 05 июля 2011

Я не уверен, вызывает ли это вашу проблему, но вы должны использовать int вместо double, так как члены TimeSpan в любом случае int.Сравнение двойного с точным числом может вызвать проблемы

        int hours = ts_timeElapsed.Hours;
        int mins = ts_timeElapsed.Minutes;
        int secs = ts_timeElapsed.Seconds;
...