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?
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: