这是我的代码:
protected void Button1_Click(object sender, EventArgs e)
{
Timer1.Enabled = true;
}
int _ta = 0;
protected void Timer1_Tick(object sender, EventArgs e)
{
if (_ta < 1)
{
_ta++;
System.Diagnostics.Debug.WriteLine(_ta);
}
但是WriteLine(_ta);
在1次之后并没有停止,它只是在继续。为什么?怎么能达到这个效果?
修改
对不起,我不太清楚:
我的意思是:
System.Diagnostics.Debug.WriteLine(_ta);
即使_ta大于0,这仍然会发生。
答案 0 :(得分:3)
我已经阅读了您的问题以及答案和您的意见。
我看到你不明白一件事:The variable '_ta' will be reinitialized with 0 on every request
这就是为什么你一直看到'1'被打印的原因。
你有一些理由以非标准的方式使用Timer - 但这没关系。
如果您希望任何变量在来自同一用户的后续请求之间保持不变,则应使用session
来存储变量 - 所有内容都在此处描述:
http://msdn.microsoft.com/en-us/library/ms178581%28v=vs.100%29.aspx
答案 1 :(得分:2)
在线条之间读取它听起来好像只需要打印_ta
变量一次(或只要它小于零)。
我怀疑你没有告诉我们什么,因为如果我在一个新的Winforms
项目中重现它,你的代码就能正常工作。
您可以通过创建新的Winforms项目,向表单添加按钮并添加以下代码来自行验证:
public partial class Form1 : Form
{
private Timer timer = new Timer();
int _ta = 0;
public Form1()
{
InitializeComponent();
timer.Tick += timer_Tick;
}
void timer_Tick(object sender, EventArgs e)
{
if (_ta < 1)
{
_ta++;
System.Diagnostics.Debug.WriteLine("This should only be called once...");
System.Diagnostics.Debug.WriteLine(_ta);
}
System.Diagnostics.Debug.WriteLine("This should be called every tick...");
}
private void button1_Click(object sender, EventArgs e)
{
timer.Enabled = true;
}
}
上述程序提供以下输出:
答案 2 :(得分:1)
为什么我不能在asp.net中迭代计时器?
我不知道你是什么意思。从字面上看,因为Timer
s不代表序列。
但是计时器在1次之后不会停止,它只会继续。为什么?
因为那是Timer
的目的。它一直在打勾,直到你禁用它。
如何达到这个效果?
有什么影响?只打一次?如果是这样,请在第一次回发后禁用它。
停下来想想只是一秒钟。您手中有timer,也许是您在亚马逊上购买的某些设备。 instruction manual表示当你启用它时,它会每十秒振铃一次。现在你问我们为什么在第一次响铃之后,它会在十秒后再次响起。因为这就是它的目的。你想知道怎么没有这种效果?把它关掉!