Search code examples
asp.nettimer

How to set a timer in asp.net


I have a page where when some operation goes wrong i want to start the timer, wait 30 second, stop the timer and retry the operation. Every time the timer starts I need to inform the user about it by changing some label's text.

How can I do it?


Solution

  • If I understand correctly, the I think you should use a client-side (javascript) timer instead. You can not use a server-side timer for this.

    When you detect the error-condition, you update the label accordingly and display it to the user. At the same time you invoke a client-side timer which will postback after 30 seconds.

    E.g. put the following timer-code onto your page:

      <script>
        function StartTimer()
        {
          setTimeout('DoPostBack()', 30000); // call DoPostBack in 30 seconds
        }
        function DoPostBack()
        {
          __doPostBack(); // invoke the postback
        }
      </script>
    

    In case of the error-condition, you have to make sure that the client-side timer will be started:

    if (error.Code == tooManyClientsErrorCode)
    {
      // add some javascript that will call StartTimer() on the client
      ClientScript.RegisterClientScriptBlock(this.GetType(), "timer", "StartTimer();", true);
      //...
    }
    

    I hope this helps (the code is not tested, since I don't have visual studio available right now).

    Update:

    To "simulate" a button click, you have to pass to button's client id to the __doPostBack() method, e.g:

    function DoPostBack()
    {
      var buttonClientId = '<%= myButton.ClientID %>';
      __doPostBack(buttonClientId, ''); // simulate a button click
    }
    

    For some other possibilities, see the following question/answer: