日期:2014-05-18 浏览次数:21203 次
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");