system.timers.timer不会导致回发

时间:2013-01-07 20:06:05

标签: c# asp.net timer

有人可以告诉我为什么这段代码不起作用。我猜它是因为没有回发射击。如何启用回发?我正在尝试启用一个触发回发的计时器并运行一个方法(这里简化)。我需要在.NET 2.0中实现它,所以不能使用UpdatePanel或Ajax Timer。

输出是;

页面加载

计时器勾号

my_method

但标签不会变得可见。

public partial class _Default : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        System.Diagnostics.Trace.WriteLine("Page Load");
        System.Timers.Timer timer = new System.Timers.Timer();
        timer.Interval = 5000;
        timer.Enabled = true;
        timer.Start();
        timer.Elapsed += new ElapsedEventHandler(timer_Elapsed);



    }
    protected void timer_Elapsed(object sender, EventArgs e)
    {
        System.Diagnostics.Trace.WriteLine("Timer Tick");
        my_method();  
    }


    protected void my_method()
    {
        System.Diagnostics.Trace.WriteLine("my_method");
        Label1.Visible = true;
    }

}

2 个答案:

答案 0 :(得分:3)

计时器正在旧的丢弃的Page实例上运行。此实例仍在内存中,但已执行渲染阶段,并且永远不会再次使用它。

要获得PostBack,您需要使用Ajax Timer或纯JavaScript。

答案 1 :(得分:1)

计时器正在服务器上触发。客户端已经拥有该页面,并且不会在客户端(如javascript)发出新请求的情况下自动请求更新;一旦发生这种情况,将呈现新版本的页面。

您需要在javascript端实现一些事情来触发事件以查找更新的信息,然后它可以根据需要更新它拥有的DOM。