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