日期:2014-05-18  浏览次数:21052 次

timer停止后怎样再让他隔一段时间后在自动启动
页面上有一个label1,timer1,代码如下:
C# code

private void timer1_Tick_1(object sender, EventArgs e)  //timer1的tick事件
        {
            if (i == 1)
            {
                timer1.Stop();
            }
            else
            {
                Thread t = new Thread(new ThreadStart(TimerStart));  //这里是线程
                t.Start();
            }
            i++;
        }

        public void TimerStart()
        {
            label1.Text = "maopian  jijiang kaishi " + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
        }

 private void Form1_Load(object sender, EventArgs e)  //加载事件
        {
            timer1.Start();
            System.Windows.Forms.Control.CheckForIllegalCrossThreadCalls = false;

}



PS:现在的条件是执行完一次后,timer1必须停住,那么我在通过什么方式可以在以后每隔10s后再次启动timer1呢???

想的头都大了,希望大神显灵!

------解决方案--------------------
这是什么命名空间下的 timer ,设置 timer 的间隔为 10s,没必要在执行的方法里 stop 它。
------解决方案--------------------
再添加一个timer来控制timer1
------解决方案--------------------
C# code

System.Windows.Forms.Control.CheckForIllegalCrossThreadCalls = false;

------解决方案--------------------
另外添加一个Timer,设置Interval,用来读取原来的timer是否已经停止,如果已经停止,则启动原来的timer
------解决方案--------------------
timer1_Tick_1 只是执行第一次时 stop ,之后再执行就不要 stop 了?
如果是这样,首先设置间隔 10s ,再在 i++ 之前加上
C# code
if (i == 1)
{
    timer1.Start();
}

------解决方案--------------------
计时器间隔设置 10s
timer1_Tick_1 方法里 if 判断去掉,i 这个变量也不要,第一行就是 timer1.Stop(); 
TimerStart 方法最后一行加上 timer1.Start(); 
这样就是计时器到点触发后就先关闭计时器,启动线程做你的工作,工作完成后开启计时器,等 10s 又再触发计时器方法,再关闭计时器,开始处理工作,循环这样,不知是不是你要的效果?
------解决方案--------------------
改成这样就好了嘛:
C# code

private void timer1_Tick_1(object sender, EventArgs e)  //timer1的tick事件
        {
            try
            {
                if (i == 1)
                {
                    return;
                    //timer1.Stop();
                }
                else
                {
                    Thread t = new Thread(new ThreadStart(TimerStart)); //这里是线程
                    t.Start();
                }
            }
            finally
            {
                i++;
            }
        }

        public void TimerStart()
        {
            this.BeginInvoke(
                new Action(
                    () =>
                    {
                        label1.Text = "maopian  jijiang kaishi " + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
                    }));
            //label1.Text = "maopian  jijiang kaishi " + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
        }

        private void Form1_Load(object sender, EventArgs e)  //加载事件
        {
            timer1.Start();
            System.Windows.Forms.Control.CheckForIllegalCrossThreadCalls = false;

        }

------解决方案--------------------
就是说你在stop的时候不stop它,只是把方法return,不执行代码就OK啦
------解决方案--------------------
可以在线程方法(例子中的TimerStart())执行完毕后重置timer控件,设置间隔为10S,然后启动timer控件。。

System.Windows.Forms.Timer控件在启动时是不执行Tick事件的,在Interval指定时间到时后才会执行Tick事件。。。

例如你上边的demo:
public void TimerStart()
{
label1.Text = "maopian jijiang kaishi " + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");