2011-07-05 4 views
2

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

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; 
     } 
    } 
} 
+4

«ASP.NET WinForms» - это противоречие в терминах. Вы имеете в виду «ASP.NET WebForms»? –

+0

Каков результат работы GetElapsedTimeString()? – thumbmunkeys

+0

В качестве побочного примечания вы должны использовать 'DataTime.UtcNow' для определения точек во времени. – CodesInChaos

ответ

2

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

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