System.Timers.Timer aTimers = new System.Timers.Timer();
/// <summary>
/// 定时发送信息
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
protected void btnDsfs_Click(object sender, EventArgs e)
{
aTimers.Interval = 300;
aTimers.Elapsed += new ElapsedEventHandler(TimeEvent);
aTimers.Enabled = true;
aTimers.Start();
}
private void TimeEvent(object source, ElapsedEventArgs e)
{
int i = YBpoll();
if (i == 0)
{
txtList.Text = "通讯正常!";
}
if (i == 1)
{
txtList.Text = "通讯正常!";
}
if (i == 11)
{
txtList.Text = "收到一元硬币!";
}
if (i == 55)
{
txtList.Text = "收到五角硬币!";
}
if (i == -1)
{
txtList.Text = "投币器关闭!";
}
if (i == -2)
{
txtList.Text = " 命令错误!";
}
if (i == -3)
{
txtList.Text = "被拒绝!";
}
if (i == -4)
{
txtList.Text = "通道关闭!";
}
if (i == -5)
{
txtList.Text = "其它错误!"; //Console.WriteLine(System.DateTime.Now);
}
}
这个按钮让timer停下来,但总是不停
protected void btnDsgb_Click(object sender, EventArgs e)
{
aTimers.Enabled = false;
aTimers.Stop();
txtList.Text = "定时关闭成功!";
}
/// <summary>
/// 定时发送信息
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
protected void btnDsfs_Click(object sender, EventArgs e)
{
aTimers.Interval = 300;
aTimers.Elapsed += new ElapsedEventHandler(TimeEvent);
aTimers.Enabled = true;
aTimers.Start();
}
private void TimeEvent(object source, ElapsedEventArgs e)
{
int i = YBpoll();
if (i == 0)
{
txtList.Text = "通讯正常!";
}
if (i == 1)
{
txtList.Text = "通讯正常!";
}
if (i == 11)
{
txtList.Text = "收到一元硬币!";
}
if (i == 55)
{
txtList.Text = "收到五角硬币!";
}
if (i == -1)
{
txtList.Text = "投币器关闭!";
}
if (i == -2)
{
txtList.Text = " 命令错误!";
}
if (i == -3)
{
txtList.Text = "被拒绝!";
}
if (i == -4)
{
txtList.Text = "通道关闭!";
}
if (i == -5)
{
txtList.Text = "其它错误!"; //Console.WriteLine(System.DateTime.Now);
}
}
这个按钮让timer停下来,但总是不停
protected void btnDsgb_Click(object sender, EventArgs e)
{
aTimers.Enabled = false;
aTimers.Stop();
txtList.Text = "定时关闭成功!";
}
这个是不是一直没执行完?
aTimers.Stop();
两个的效果一样,只不过后一个引发Elapsed 事件。用一个就可以了。至于为什么不停,你调试下吧,看看按了按钮程序跳到哪里。
protected void btnDsgb_Click(object sender, EventArgs e)
{
//aTimers.Enabled = false;
aTimers.Stop();
txtList.Text = "定时关闭成功!";
}
private void button1_Click(object sender, EventArgs e)
{
t2.Interval = 100;
t2.Elapsed += t2_Elapsed;
t2.Enabled = true;
t2.Start();
}private void button2_Click(object sender, EventArgs e)
{
t2.Stop();
}int count = 0;
void t2_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
{
count++;
System.Threading.Thread.Sleep(200);
EventHandler eh =(s1,e1)=>{ this.Text = count.ToString(); };
this.Invoke(eh);
}
另外你的代码中有两个问题
1.aTimers.Enabled = false;和Stop()是一样的效果,用一个就可以了。
aTimers.Start();和Enabled=true;也是一样的。
2.if语句的写法。虽然不影响执行结果,但改成if... else if是不是好点?
或者swicth...case,或者在每个if语句块后加上return。
private void button1_Click(object sender, EventArgs e)
{ aTimers.Interval = 300;
aTimers.Elapsed += new ElapsedEventHandler(TimeEvent);
aTimers.Enabled = true;
}
private void TimeEvent(object source, ElapsedEventArgs e)
{
int i = YBpoll();
switch (i)
{
case 0:
Invoke(new strText(TimeStr), "通讯正常");
break;
case 1:
Invoke(new strText(TimeStr), "通讯正常");
break;
case 11:
Invoke(new strText(TimeStr), "收到一元硬币");
break;
case 55:
Invoke(new strText(TimeStr), "收到五角硬币");
break;
case -1:
Invoke(new strText(TimeStr), "投币器关闭");
break;
case -2:
Invoke(new strText(TimeStr), "命令错误");
break;
case -3:
Invoke(new strText(TimeStr), "被拒绝");
break;
case -4:
Invoke(new strText(TimeStr), "通道关闭");
break;
case -5:
Invoke(new strText(TimeStr), "其它错误");
break;
default:
Invoke(new strText(TimeStr), "其它错误");
break;
}
}
private delegate void strText(string str); private void TimeStr(string str)
{
textBox1.Text = str;
} private void button2_Click(object sender, EventArgs e)
{
if (aTimers.Enabled == true)
{
aTimers.Enabled = false;
}
//aTimers.Stop();
if (aTimers.Enabled == false)
{
textBox1.Text = "定时关闭!";
}
}
我改了一下,这样就可以了