怎么实现暂停继续功能,用timer吗

如何实现暂停继续功能,用timer吗?
我想实现如下功能:
三个按钮:开始、暂停、继续
点击开始后,计时(100s);
在100s内任意时刻(如35s时)点击暂停,计时停止;
点击继续,计时恢复,走完剩下的65s。

我用的一个system.timer

现在调试的时候,出现这样的问题:
一旦点击开始,其他两个按钮就不可点了。

我对线程不是很了解,难道单纯使用timer无法实现我想要的功能吗? 

求前辈指教!谢谢!




------解决方案--------------------
你可以用事件的方式: ManualResetEvent pauseEvent = new ManualResetEvent(false);
pauseEvent.waitone(); 线程等待...
pauseEvent.set(); 线程继续
轻松实现暂停功能
------解决方案--------------------
控制过程使用一个线程,暂停、启动的按钮命令在一个线程,在运行过程中,通过命令控制某个变量,通知线程随时挂起等,或者将线程处于Sleep状态,无限循环暂停状态,等等
------解决方案--------------------
你这个设备到底是现实中的设备,还是仅仅是你窗体中的一个动画效果?
如果仅仅是个动画,你点暂停的时候记住计数,继续的时候从这个计数开始走不就得了?
如果是控制现实中的设备,就不是计数那么简单了.因为现实中的设备不会每一次运行周期都非常精确,尤其还存在故障的情况下.

现实中的设备必须要有输入状态,告诉程序现在的状况,程序根据设备状况来执行逻辑,如果出现错误就自动停止了
而不是设备都已经停止运转了,你程序还在计数.
------解决方案--------------------
简单说下思路...比如我现在窗体上有个label执行倒数..
1.首先既然是倒数,肯定是要用到timer去执行100-1的过程...
2.然后我不太清楚如果timer的enable改成false再改回true是从头重新开始,还是继续刚才的事件..那么你需要一个变量去保存你刚才按暂停的时候倒数到了哪里...
3.跟上面一样.由于不知道改成true后是从什么时候开始,因此timer执行的内容也建议包装成一个带int参数的方法,点击再开始的时候将上面记录的数字传进去,继续timer
4.这个如果涉及到多线程..直接用timer.Invoke去执行暂停和继续的方法就可以了.当然我现在没有写代码,并不清楚是否涉及到多线程,,就我个人感觉事件和委托就足够处理了.
5.暂停建议单独写个方法,在点击暂停按钮的事件里触发暂停事件,,然后暂停事件执行暂停方法..
那么准备工作做好之后..逻辑上是这样:
1.点击开始,timer运行
2.任意时间点击暂停,记录当前的数字,并触发暂停事件
3.点击再开始按钮.将记录的数字传入再启动方法,timer再次启动
4.2-3循环
5.结束.

差不多就是这样= =...
------解决方案--------------------
类似播放器的暂停,播放,停止功能么。
private string flag = "stop";
        private int j = 10;
        private int i = 0;
        private void timer1_Tick(object sender, EventArgs e)
        {
            if (i <= j)
            {
                if (flag == "hold")
                {
                    textBox1.AppendText("等待命令……" + Environment.NewLine);
                    return;
                }
                else if (flag == "stop")
                    return;
                //执行命令
                textBox1.AppendText(i.ToString() + Environment.NewLine);
                if (i == j)
                {
                    timer1.Enabled = false;
                    i = 0;
                }else
                    i++;
            }
        }

        private void button4_Click(object sender, EventArgs e)
        {
            timer1.Enabled = true;
            flag = "start";
        }

        private void button5_Click(object sender, EventArgs e)
        {
            flag = "hold";
        }

        private void button6_Click(object sender, EventArgs e)
        {
            flag = "stop";
            timer1.Enabled = false;
            i = 0;
        }
------解决方案--------------------
如果是多个步骤,每个步骤再进行计时的话,我们来分析一下过程:
1.步骤1开始;
2.点击暂停,记录经过的时间,计时器暂停;
3.点击继续,将经过的时间传入计时方法,计时器再启动;
4.重复2-3;
5.步骤1完成,计时器重置;
6.步骤2开始;
7.进行2-4;