-2

这是我的代码:

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。

4

3 回答 3

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

于 2013-06-22T20:12:09.607 回答
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;
    }
}

上面的程序给出以下输出:

在此处输入图像描述

于 2013-06-22T19:32:02.693 回答
1

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

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

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

因为这Timer就是设计的目的。它一直在滴答作响,直到您禁用它。

怎样才能达到这种效果?

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

停下来想一想你手里有一个计时器,也许是你在亚马逊上购买的一些设备。它的使用说明书说,当你启用它时,它会每十秒响一次。现在你问我们为什么在第一次响铃之后,十秒后它又响了。因为这就是它的设计目的。你想知道如何不产生这种效果吗?把它关掉!

于 2013-06-22T19:01:29.767 回答