ASP.Net 中的计时器(C# 语言)在 1 个刻度后停止

Timer in ASP.Net (Language C#) stops after 1 tick

我想在我正在处理的程序中使用计时器,但它总是在 1 滴答后停止!!你能给我任何提示,让它不停地重复(或直到我想要它)吗??
这是我的代码:

    int i = 20;

    protected void Page_Load(object sender, EventArgs e)
    {
        Label1.Text = "(20)";
    }

    protected void Timer1_Tick(object sender, EventArgs e)
    {
        i--;
        Label1.Text = "(" + i + ")";

        if (i == 0)
        {
            Session["Profession"] = "Visiteur";
            Response.Redirect("Acceuil.aspx");
        }

编辑:我的 HTML 代码:

<form id="form1" runat="server">
<div><center>
    <span class="style1">message</span><br 
        class="style1" />

    <asp:ScriptManager ID="ScriptManager1" runat="server">
    </asp:ScriptManager>

    <asp:Timer ID="Timer1" runat="server" Interval="1000" ontick="Timer1_Tick" >
    </asp:Timer>

        <asp:Timer ID="Timer2" runat="server" Interval="1000">
    </asp:Timer>

        <br />
    <asp:UpdatePanel ID="UpdatePanel1" runat="server" UpdateMode="Conditional">
        <ContentTemplate>
            <asp:Label ID="Label1" runat="server"></asp:Label>
        </ContentTemplate>
        <Triggers>
            <asp:AsyncPostBackTrigger ControlID="Timer1" EventName="Tick" />
        </Triggers>
    </asp:UpdatePanel>

    <asp:LinkButton ID="LinkButton1" runat="server" onclick="LinkButton1_Click" 
        PostBackUrl="~/Acceuil.aspx">Retour</asp:LinkButton>
    <br />
        </center>
</div>
</form>

Edit2:我想要做的是正常的重定向代码,数到 20 并每秒刷新一次(向用户显示还剩多少秒),最后它重定向到一个新页面,但它不是'不工作,所以我想知道为什么?? 我想我从@Andrei Rînea 那里得到了答案,感谢大家的帮助:)

Edit3:已解决,这是代码:

static int i = 20;
protected void Page_Load(object sender, EventArgs e)
{
    if(!Page.IsPostBack)
    Label1.Text = "20";
}
protected void Timer1_Tick(object sender, EventArgs e)
{

    i--;
    Label1.Text = i.ToString();

    if (i == 0)
    {
        i = 20;
        Session["Profession"] = "Visiteur";
        Response.Redirect("Acceuil.aspx");
    }
}

再次感谢大家:)

我在这里假设您希望在后台有一个在您的服务器上运行的进程。

我还假设您已尝试将此添加到您的 Webform。

如果是这样,您遇到的问题是您的 Webform 对象仅在处理您的请求的短时间内存在,之后它会被处理掉 - 包括您的计时器。

如果我是对的,你可能想看看 Quartz.Net:

http://www.mikesdotnetting.com/article/254/scheduled-tasks-in-asp-net-with-quartz-net

您正在尝试 运行 服务器上的客户端代码。您需要在 JavaScript 中执行此操作。

C# 代码将 运行 刚好在呈现页面之前,不会更长。您可能认为只要访问者在页面上,代码就会 运行 但事实并非如此。

Please use the following code :



    static int i = 20;
    protected void Page_Load(object sender, EventArgs e)
    {
        if(!Page.IsPostBack)
        Label1.Text = "(20)";
    }
    protected void Timer1_Tick(object sender, EventArgs e)
    {

        i--;
        Label1.Text =i.ToString();

        if (i == 0)
        {
            Session["Profession"] = "Visiteur";
            Response.Redirect("Acceuil.aspx");
        }
    }


    your HTML code should be like :

    <form id="form1" runat="server">
        <div>
        <asp:ScriptManager ID="ScriptManager1" runat="server">

            </asp:ScriptManager>


            <asp:UpdatePanel ID="UpdatePanel1" runat="server">
                <ContentTemplate>
                     <asp:Label ID="Label1" runat="server" Text="Label"></asp:Label>



                 <asp:Timer ID="Timer1" runat="server" ontick="Timer1_Tick" Interval="1000">
                   </asp:Timer>
                </ContentTemplate>

            </asp:UpdatePanel>

        </div>
        </form>