timer计时器无法停止事件 求解

qery 2010-01-15 03:55:53
功能描述:点击Button1,执行timer_Elapsed事件,再点击停止执行;如此反复
问题:第二次点击 事件timer_Elapsed无法停止;
麻烦解释如何停止事件timer_Elapsed,解释下面这样为何无法停止事件timer_Elapsed
附代码:

public partial class _Default : System.Web.UI.Page
{
static int count = 0;

protected void Page_Load(object sender, EventArgs e)
{

}
protected void Button1_Click(object sender, EventArgs e)
{
System.Timers.Timer timer = new System.Timers.Timer();
timer.AutoReset = true;
timer.Enabled = true ;
timer.Elapsed += new ElapsedEventHandler(timer_Elapsed);
timer.Interval = 1000;

count ++;
if (count % 2 == 0)
{
timer.Enabled = false;
}
}

void timer_Elapsed(object sender, ElapsedEventArgs e)
{
this.Label1 .Text += "8899-";
}
}
...全文
758 29 打赏 收藏 转发到动态 举报
写回复
用AI写文章
29 条回复
切换为时间正序
请发表友善的回复…
发表回复
sadFedora 2010-03-07
  • 打赏
  • 举报
回复
引用 23 楼 cykevin 的回复:
如需要阅读该回复,请登录或注册CSDN!


学习一下
jerry_zhang99 2010-01-29
  • 打赏
  • 举报
回复
[Quote=引用 22 楼 qery 的回复:]
引用 17 楼 jerry_zhang99 的回复:
private void timer_Elapsed(object sender, ElapsedEventArgs e)
        {
            Timer t = (Timer)sender;
             t.销毁;
            count++;
            label1.Text = count.ToString();
        }


试试这个

逻辑错误,无效,谢谢
[/Quote]

不可能
nikiforenko11 2010-01-19
  • 打赏
  • 举报
回复
友情帮顶!!!
lxl369411096 2010-01-19
  • 打赏
  • 举报
回复
up
founderfang 2010-01-15
  • 打赏
  • 举报
回复
学习中,帮顶。
lsd123 2010-01-15
  • 打赏
  • 举报
回复
.
cykevin 2010-01-15
  • 打赏
  • 举报
回复
将timer设成全局的静态变量试试
qery 2010-01-15
  • 打赏
  • 举报
回复
[Quote=引用 17 楼 jerry_zhang99 的回复:]
private void timer_Elapsed(object sender, ElapsedEventArgs e)
        {
            Timer t = (Timer)sender;
            t.销毁;
            count++;
            label1.Text = count.ToString();
        }


试试这个
[/Quote]
逻辑错误,无效,谢谢
qery 2010-01-15
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 linux7985 的回复:]
timer.Change( Timeout.Infinite, Timeout.Infinite );

这个和停止的效果是一样的
可以试试
[/Quote]
Change是System.Threading.Timer的方法,我此处用的是System.Timers.timer,五此方法,谢谢
qery 2010-01-15
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 javak 的回复:]
timer.Elapsed += new ElapsedEventHandler(timer_Elapsed);  不能放到你的Button Click event method中
[/Quote]
无效,谢谢
tigerdengxc 2010-01-15
  • 打赏
  • 举报
回复
我来顶一下
qery 2010-01-15
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 oonukeoo 的回复:]
C# codeusing System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Linq;using System.Text;using System.Windows.Forms;using System.Timers;namespace WindowsFormsApplication1
{publicpartialclass Form1 : Form
{
System.Timers.Timer timer=new System.Timers.Timer();int count=0;int beginbegin=1;public Form1()
{
InitializeComponent();
}privatevoid button1_Click(object sender, EventArgs e)
{
beginbegin++;if (beginbegin%2==0)
{
timer.Elapsed+=new ElapsedEventHandler(timer_Elapsed);
timer.Interval=1000;
timer.Enabled=true;
}else
{
timer.Enabled=false;
}
}privatevoid timer_Elapsed(object sender, ElapsedEventArgs e)
{
count++;
label1.Text= count.ToString();
}

}
}
刚写了个测试下好用 你看看哪有些出入吧
[/Quote]

改过测试了,无法停止事件,区别是我用web,你的win forms,谢谢
jerry_zhang99 2010-01-15
  • 打赏
  • 举报
回复
private void timer_Elapsed(object sender, ElapsedEventArgs e)
{
Timer t = (Timer)sender;
t.销毁;
count++;
label1.Text = count.ToString();
}


试试这个
ysz89757 2010-01-15
  • 打赏
  • 举报
回复
看样子还有点复杂啊
wangping06 2010-01-15
  • 打赏
  • 举报
回复
看看
烈火蜓蜻 2010-01-15
  • 打赏
  • 举报
回复
timer.Change( Timeout.Infinite, Timeout.Infinite );

这个和停止的效果是一样的
可以试试
JavaK 2010-01-15
  • 打赏
  • 举报
回复
timer.Elapsed += new ElapsedEventHandler(timer_Elapsed); 不能放到你的Button Click event method中
萨拉嘿 2010-01-15
  • 打赏
  • 举报
回复

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Timers;

namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
System.Timers.Timer timer=new System.Timers.Timer();
int count = 0;
int beginbegin = 1;
public Form1()
{
InitializeComponent();
}

private void button1_Click(object sender, EventArgs e)
{
beginbegin++;
if (beginbegin % 2==0)
{
timer.Elapsed += new ElapsedEventHandler(timer_Elapsed);
timer.Interval = 1000;
timer.Enabled = true;
}
else
{
timer.Enabled = false;
}
}

private void timer_Elapsed(object sender, ElapsedEventArgs e)
{
count++;
label1.Text = count.ToString();
}

}
}

刚写了个测试下好用 你看看哪有些出入吧
qery 2010-01-15
  • 打赏
  • 举报
回复
这种通过web传递的话,每次页面都是重新生成的。
因此第一次按钮打开的timer无论是不是设置static都是不可能关闭的。
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
timer 未设置static变量,计数器设置static变量有误吗?
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

测试没错误
qery 2010-01-15
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 ouc_ajax 的回复:]
楼主,你这个是web的程序吗?
如果是web的程序的话,建议楼主看看页面生存周期。

+++++++++++++++++++++++++++++++++++++++++++++
public partial class _Default : System.Web.UI.Page
++++++++++++++++++++++++++++++++++++++++++++++++

这种通过web传递的话,每次页面都是重新生成的。
因此第一次按钮打开的timer无论是不是设置static都是不可能关闭的。
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
timer 未设置static变量,计数器设置static变量有误吗?
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

为什么会有这种需求呢?
+++++++++++++++++++++++++++++++++++++++++++++++++++++++
做一个年终抽奖程序,Button1未按下第二次次前一直随机查询,按下第二次后停止,如此反复
+++++++++++++++++++++++++++++++++++++++++++++++++++++++

如果真的是想用全局变量的话,Application中可以放!
不过不建议这么做
加载更多回复(9)

111,120

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧