我現有一個計時器要用來做已經過時間的顯示我的做法是在開始計時的時候先用一個變數記住開始的時間
long timerStartTick = DateTime.Now.Ticks;然後在計時間的 tick 事件再算出經過時間
long elapsedTicks = DateTime.Now.Ticks - this.timerStartTick;這樣運作的很好沒錯,可是我想要能夠暫停計時器,
於是我會叫用 timer.stop() 這個方法,
但是我希望當恢復計時器計時的時候能夠從我上次暫停的時間繼續計時,
那麼這樣應該要怎麼寫呢? 有請大俠說明,感恩。

解决方案 »

  1.   

    定义两个变量:private bool bStop = false;
    private int Seconds = 0;定义一个timer,设置间隔为1s,在tick里面写:
    if (!bStop) Seconds++;
    if (Seconds == 120) // 2 minutes
    {
        //做你的事情
        Seconds = 0;
    }停止里面写:
    bStop = true;
      

  2.   


    暂停时候timer.stop()
    继续的时候需要调整开始时间:long elapsedTicks = DateTime.Now.Ticks - this.timerStartTick;
    这里在暂停时已经获取到Ticks
    在继续时候:
    this.timerStartTick=DateTime.Now.AddTicks(-elapsedTicks);//取负值
      

  3.   


    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();
    }
      

  4.   

    請問我已經暫停了 timer 所以應該不會再觸發 tick 事件了,那麼您的 seconds++ 要怎麼執行到呢? 如果是說不要用 stop() 暫停的話,用 flag 方式來通知 timer 暫停,那麼您的方法當我把 bStop = flash 時要如何可以從我暫停的時間繼續? 可以再請說明一下嗎? 
      

  5.   

    你不是就要stop的时候不计时吗?要恢复计时再点start就可以了,second会继续++的
      

  6.   


    好像不太對耶,我照您的方法這樣試long elapsedTicks = DateTime.Now.Ticks - this.timerStartTick;if (isStop)
        this.timerStartTick = DateTime.Now.AddTicks (-elapsedTicks).Ticks;//取负值結果還是不行,是不是我做錯了?
      

  7.   


    可是我要的比較希望是像 2 樓大哥的那樣方法,因為我的經過時間不只是單純秒數而已,我還要用 timespan 來格式化總經過時間,像下面這樣:TimeSpan elapsedSpan = new TimeSpan (elapsedTicks);
    elapsedTime = String.Format ("{0:d2}:{1:d2}:{2:d2}", elapsedSpan.Hours, elapsedSpan.Minutes, elapsedSpan.Seconds);//........這裡是我要做的其他事
    //.................
      

  8.   

    我的程式大概就是下面這樣,我應該要怎麼完成下面那段才對??privaet bool isStop;
    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;
    }
      

  9.   

    添加Button TextBox Timer
    ==============================
    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();
    }
      

  10.   


    DateTime dateTime = new DateTime();
    dateTime.AddSeconds(second);
    elapsedTime = String.Format ("{0:d2}:{1:d2}:{2:d2}", dateTime.Hours, dateTime.Minutes, dateTimen.Seconds);这样就可以格式化时间了
      

  11.   


    String.Format ("{0:d2}:{1:d2}:{2:d2}", dateTime.Hour, dateTime.Minute, dateTimen.Second);都是没有s的...上面错了...
      

  12.   


    dateTime=dateTime.AddSeconds(second);