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

时间:2015-04-16 10:58:21

标签: c# asp.net timer ticker

我想在我正在使用的程序中使用计时器,但它总是在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并每秒刷新一次(向用户显示剩余的秒数),最后重定向到新页面,但它无法正常工作,所以我想知道为什么? 我想我从@AndreiRînea得到了答案,谢谢大家的帮助:))

编辑3:解决了,这是代码:

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

再次感谢大家:)

3 个答案:

答案 0 :(得分:1)

我将在此假设您希望在后台运行服务器。

我也会假设您已经尝试将此添加到您的网络表单中。

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

如果我更正,你可能想看看Quartz.Net

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

答案 1 :(得分:0)

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

C#代码将在呈现页面之前运行,而不是更长。您可能认为只要访问者在页面上,代码就会运行,而不是这种情况。

答案 2 :(得分:0)

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>
相关问题