日期:2014-05-18 浏览次数:21209 次
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;
}
System.Windows.Forms.Control.CheckForIllegalCrossThreadCalls = false;
------解决方案--------------------
另外添加一个Timer,设置Interval,用来读取原来的timer是否已经停止,如果已经停止,则启动原来的timer
------解决方案--------------------
timer1_Tick_1 只是执行第一次时 stop ,之后再执行就不要 stop 了?
如果是这样,首先设置间隔 10s ,再在 i++ 之前加上
if (i == 1)
{
    timer1.Start();
}
------解决方案--------------------
计时器间隔设置 10s
timer1_Tick_1 方法里 if 判断去掉,i 这个变量也不要,第一行就是 timer1.Stop();  
TimerStart 方法最后一行加上 timer1.Start();  
这样就是计时器到点触发后就先关闭计时器,启动线程做你的工作,工作完成后开启计时器,等 10s 又再触发计时器方法,再关闭计时器,开始处理工作,循环这样,不知是不是你要的效果?
------解决方案--------------------
改成这样就好了嘛:
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");