我現有一個計時器要用來做已經過時間的顯示我的做法是在開始計時的時候先用一個變數記住開始的時間
long timerStartTick = DateTime.Now.Ticks;然後在計時間的 tick 事件再算出經過時間
long elapsedTicks = DateTime.Now.Ticks - this.timerStartTick;這樣運作的很好沒錯,可是我想要能夠暫停計時器,
於是我會叫用 timer.stop() 這個方法,
但是我希望當恢復計時器計時的時候能夠從我上次暫停的時間繼續計時,
那麼這樣應該要怎麼寫呢? 有請大俠說明,感恩。
long timerStartTick = DateTime.Now.Ticks;然後在計時間的 tick 事件再算出經過時間
long elapsedTicks = DateTime.Now.Ticks - this.timerStartTick;這樣運作的很好沒錯,可是我想要能夠暫停計時器,
於是我會叫用 timer.stop() 這個方法,
但是我希望當恢復計時器計時的時候能夠從我上次暫停的時間繼續計時,
那麼這樣應該要怎麼寫呢? 有請大俠說明,感恩。
private int Seconds = 0;定义一个timer,设置间隔为1s,在tick里面写:
if (!bStop) Seconds++;
if (Seconds == 120) // 2 minutes
{
//做你的事情
Seconds = 0;
}停止里面写:
bStop = true;
暂停时候timer.stop()
继续的时候需要调整开始时间:long elapsedTicks = DateTime.Now.Ticks - this.timerStartTick;
这里在暂停时已经获取到Ticks
在继续时候:
this.timerStartTick=DateTime.Now.AddTicks(-elapsedTicks);//取负值
private int second;
private void Form1_Load(object sender, EventArgs e)
{
timer1.Interval = 1000;
second = 0;
}
private void timer1_Tick(object sender, EventArgs e)
{
second++;
label1.Text = second.ToString();
}
private void button_Start_Click(object sender, EventArgs e)
{
timer1.Start();
}
private void button_Stop_Click(object sender, EventArgs e)
{
timer1.Stop();
}
好像不太對耶,我照您的方法這樣試long elapsedTicks = DateTime.Now.Ticks - this.timerStartTick;if (isStop)
this.timerStartTick = DateTime.Now.AddTicks (-elapsedTicks).Ticks;//取负值結果還是不行,是不是我做錯了?
可是我要的比較希望是像 2 樓大哥的那樣方法,因為我的經過時間不只是單純秒數而已,我還要用 timespan 來格式化總經過時間,像下面這樣:TimeSpan elapsedSpan = new TimeSpan (elapsedTicks);
elapsedTime = String.Format ("{0:d2}:{1:d2}:{2:d2}", elapsedSpan.Hours, elapsedSpan.Minutes, elapsedSpan.Seconds);//........這裡是我要做的其他事
//.................
private long timerStartTicks;private void Form1_Load(object sender, EventArgs e)
{
timer1.Interval = 1000;
}private void timer1_Tick(object sender, EventArgs e)
{
long elapsedTicks = DateTime.Now.Ticks - this.timerStartTick; if (this.isStop) {
this.isStop = false;
elapsedTicks = .......????? //這裡要怎麼寫才能讓 elapsedTicks變成是我上次暫停的時間????
} TimeSpan elapsedSpan = new TimeSpan (elapsedTicks);
elapsedTime = String.Format ("{0:d2}:{1:d2}:{2:d2}", elapsedSpan.Hours, elapsedSpan.Minutes, elapsedSpan.Seconds); //...........
//.......}
private void button_Start_Click(object sender, EventArgs e)
{
timer1.Start();
this.timerStartTick = DateTime.Now.Ticks;
}
private void button_Stop_Click(object sender, EventArgs e)
{
timer1.Stop();
this.isStop = true;
}
==============================
public Form1()
{
InitializeComponent();
IsStart = false;
}
System.Timers.Timer timer;
private void button1_Click(object sender, EventArgs e)
{
if (timer1.Enabled)
{
pauseDt = DateTime.Now;
timer1.Enabled = false;
}
else
{
startDt = startDt.Add(DateTime.Now.Subtract(pauseDt));
timer1.Enabled = true;
if (!IsStart)
{
IsStart = true;
startDt = DateTime.Now;
}
}}
bool IsStart;
DateTime startDt,pauseDt;
private void timer1_Tick(object sender, EventArgs e)
{
TimeSpan ts = DateTime.Now.Subtract(startDt);
textBox1.Text = ts.TotalSeconds.ToString();
}
DateTime dateTime = new DateTime();
dateTime.AddSeconds(second);
elapsedTime = String.Format ("{0:d2}:{1:d2}:{2:d2}", dateTime.Hours, dateTime.Minutes, dateTimen.Seconds);这样就可以格式化时间了
String.Format ("{0:d2}:{1:d2}:{2:d2}", dateTime.Hour, dateTime.Minute, dateTimen.Second);都是没有s的...上面错了...
dateTime=dateTime.AddSeconds(second);