ASP.NET计时器事件

时间:2010-05-10 05:04:15

标签: asp.net timer

protected void SubmitButtonClicked(object sender, EventArgs e)
{
    System.Timers.Timer timer = new System.Timers.Timer();
        ---
        ---
    //line 1
    get_datasource();

    String message = "submitted.";
    ScriptManager.RegisterStartupScript(this.Page, this.GetType(), "popupAlert", "popupAlert(' " + message + " ');", true);

    timer.Interval = 30000;
    timer.Elapsed += new ElapsedEventHandler(timer_tick);

    // Only raise the event the first time Interval elapses.
    timer.AutoReset = false;
    timer.Enabled = true;
}

protected void timer_tick(object sender, EventArgs e)
{
//line 2
    get_datasource();
    GridView2.DataBind();
}

问题在于正在显示的网格视图中的数据...因为当调用第1行之后的get_datasource时,更新的数据显示在网格视图中,因为它是回发事件但是当计时器事件handler正在调用timer_tick事件,调用get_datasource函数,但之后更新的数据在网格视图中不可见。由于timer_tick不是回发事件,因此无法更新

2 个答案:

答案 0 :(得分:4)

实现它的服务器端计时器不适用于您要实现的目标。

如果您在更新面板中同时包含计时器和gridview,则每次tick事件触发时,计时器都会触发回发,并且您可以更新数据。

这是一篇很棒的博文,旨在帮助您:http://mattberseth.com/blog/2007/08/using_the_ajax_timer_control_a.html

<asp:UpdatePanel runat="server" UpdateMode="Conditional">
    <ContentTemplate>
        <asp:GridView ID="GridView2" runat="server">
        </asp:GridView>
        <asp:Timer id="Timer1" runat="server" Interval="30000" OnTick="Timer_Tick" Enabled="false" />  
        <asp:Button ID="Button1" runat="server" Text="Update" OnClick="SubmitButtonClicked" />              
    </ContentTemplate>
</asp:UpdatePanel>

服务器端代码:

    private void Timer_Tick(object sender, EventArgs args)
    {
        get_datasource();
        GridView2.DataBind();

        Timer1.Enabled = false; 
    }

    protected void SubmitButtonClicked(object sender, EventArgs e)
    {
        String message = "submitted.";
        ScriptManager.RegisterStartupScript(this.Page, this.GetType(), "popupAlert", "popupAlert(' " + message + " ');", true);

        get_datasource();
        GridView2.DataBind();

        Timer1.Enabled = true;

    }

答案 1 :(得分:1)

你不能使用这样的计时器。虽然ASP.NET试图隐藏HTTP的请求/响应周期,但循环仍然存在,因此您不能在回发中执行任何您喜欢的操作:您仍需要了解正在回送HTTP响应以响应HTTP请求。

是否有任何特定的原因为什么你要尝试使用这样的计时器?这似乎对我没有意义。你想要实现的是什么?