Label is not updated in event callback

  • Thread starter Thread starter Borr
  • Start date Start date
B

Borr

Code fragment as simple as possible :

public class TestTimer : System.Web.UI.Page
{
protected System.Web.UI.WebControls.Label Label1;
protected System.Timers.Timer timer1;

private void Page_Load(
object sender,
System.EventArgs e)
{
Label1.Text = "Before timer";
}

private void timer1_Elapsed(
object sender,
System.Timers.ElapsedEventArgs e)
{
Label1.Text = "After timer";
timer1.Stop();
}

private void InitializeComponent()
{
this.timer1 = new System.Timers.Timer();
((System.ComponentModel.ISupportInitialize)
(this.timer1)).BeginInit();
this.timer1.Enabled = true;
this.timer1.Interval = 5000;
this.timer1.Elapsed += new
System.Timers.ElapsedEventHandler(this.timer1_Elapsed);
this.Load += new System.EventHandler(this.Page_Load);
((System.ComponentModel.ISupportInitialize)
(this.timer1)).EndInit();

}

}

When the timer is elapsed, timer1_elapsed method is called
(I see it in the debugger), line

Label1.Text = "After timer";

runs without any problem, but in fact Label1
remains "Before timer" ! WHY ?

Label1 and timer1 were added automatically, with Web form
designer of Visual Studio .Net, InitializeComponent()
method was generated automatically, and I did not touch it.
 
The problem is that the timer is a server-side control, and while, yes, it
is firing properly, by the time it fires, the page has already been sent to
the client and therefore, updating the label only updates it on the server.
Once the page has been served, nothing that happens on the server will be
sent down to the client.
If you need something on the client side to update after a given interval,
you might want to look into a javascript timer, they seem to have worked
well for me in the past.

HTH,
-Cliff
 
because the timer fires after the page has been sent to the client, so the
change to label has no impact. you would need to put in a wait for the timer
in your onload, or at least by prerender, for any changes done by the timer
to appear in the rendered page.

-- bruce (sqlwork.com)
 
Back
Top