Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/34.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 为什么可以';我不能在asp.net中迭代计时器吗?_C#_Asp.net_Timer - Fatal编程技术网

C# 为什么可以';我不能在asp.net中迭代计时器吗?

C# 为什么可以';我不能在asp.net中迭代计时器吗?,c#,asp.net,timer,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) {

这是我的代码:

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);

            } 
这仍然会发生,即使_ta大于0

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

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

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

因为这就是
定时器
的设计目的。它一直滴答作响,直到你禁用它

怎样才能达到这个效果呢

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


停下来想一想。你手里拿着一个,也许是你在亚马逊上买的一些设备。据说当你启用它时,它会每十秒钟响一次。现在你问我们为什么在第一声铃声响起后,十秒钟后它又响了。因为这就是它的设计目的。你想知道如何避免这种影响吗?关掉它

在行与行之间读取听起来好像您只希望打印一次
\u 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;
    }
}
公共部分类表单1:表单
{
专用计时器=新计时器();
int _ta=0;
公共表格1()
{
初始化组件();
timer.Tick+=定时器_Tick;
}
无效计时器勾号(对象发送方,事件参数e)
{
如果(_ta<1)
{
_ta++;
System.Diagnostics.Debug.WriteLine(“这应该只调用一次…”);
系统.诊断.调试.写入线(_ta);
}
System.Diagnostics.Debug.WriteLine(“这应该被称为每个勾号…”);
}
私有无效按钮1\u单击(对象发送者,事件参数e)
{
timer.Enabled=true;
}
}
上述程序给出以下输出:


我已经阅读了你的问题、答案和评论。 我看你不明白一件事:
变量'\u ta'将在每次请求时用0重新初始化
,这就是为什么你一直看到“1”被打印出来的原因

您有一些理由以非标准方式使用计时器,但这并不重要

如果希望任何变量在来自同一用户的后续请求之间保持不变,则应使用
session
存储该变量-所有内容如下所述:

你的问题是什么?我很困惑。是什么让你认为增加一个计数器会停止计时器?那是什么意思?计时器不是集合,您将如何迭代它?您使用计时器设置重复事件。。。它应该继续运行,因为您从一开始就没有禁用过。no 1总是打印出来的,但第一次之后不应该打印,因为它比0大。是的,它在Winforms上工作,但在asp.net中不工作。实际发生了什么?请记住,web是无状态的,因此不会保留信息。我从未使用过webforms,但我认为每次单击按钮都会发出一个新的请求,这意味着
\u ta
变量和计时器将被重新初始化。我认为计时器在web应用程序中是没有意义的。@Benjamin:是的。考虑网页中嵌入的自动更新图表。请选中“编辑”。谢谢您需要为我们提供最小和最清晰的工作示例,展示您描述的行为,因为如果正确实现,情况就不应该是这样。这是我的代码,但在asp.net上不是winforms!这不是一个有效的例子。这是一段代码片段。所以有新的请求只是来自计时器的滴答声?没错。计时器在浏览器中的页面上滴答作响。在每个刻度上,页面都向服务器发出AJAX请求,在服务器上执行处理程序,并将响应发送回浏览器。这是因为:1。处理程序是一个服务器端代码,2。服务器无法通过响应请求以外的任何其他方式向客户端(浏览器)发送任何数据,3。web服务器端没有主循环,因此无法实现计时器。
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;
    }
}