为什么我不能迭代asp.net中的计时器?

时间:2013-06-22 18:56:57

标签: c# asp.net timer

这是我的代码:

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,这仍然会发生。

3 个答案:

答案 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;
    }
}

上述程序提供以下输出:

enter image description here

答案 2 :(得分:1)

  

为什么我不能在asp.net中迭代计时器?

我不知道是什么意思。从字面上看,因为Timer s不代表序列。

  

但是计时器在1次之后不会停止,它只会继续。为什么?

因为那是Timer的目的。它一直在打勾,直到你禁用它。

  

如何达到这个效果?

有什么影响?只打一次?如果是这样,请在第一次回发后禁用它。

停下来想想只是一秒钟。您手中有timer,也许是您在亚马逊上购买的某些设备。 instruction manual表示当你启用它时,它会每十秒振铃一次。现在你问我们为什么在第一次响铃之后,它会在十秒后再次响起。因为这就是它的目的。你想知道怎么没有这种效果?把它关掉!