Time delay before redirect

user1331344 picture user1331344 · Apr 13, 2012 · Viewed 31.8k times · Source

I create a register page for my web application. The application require that after user successfully register a new account, the page will show a message "Register successfully", then wait for 5 seconds before switch to Login page. I used Thread.Sleep(5000). It wait for 5 seconds but it does not display the message. Can anyone help me?

void AccountServiceRegisterCompleted(object sender, RegisterCompletedEventArgs e)
    {
        if (e.Result)
        {
            lblMessage.Text = "Register successfully";

            Thread.Sleep(5000); 
            this.SwitchPage(new Login());
        }
        else
        {
            ...
        }
    }

Answer

lorond picture lorond · Apr 13, 2012

Thread.Sleep(5000) only suspends your thread for 5 seconds - no code onto this thread will be executed during this time. So no messages or anything else.

If it's an ASP.NET app, client doesn't know what's going on on server and waits server's response for 5 seconds. You have to implement this logic manually. For example, either using JavaScript:

setTimeout(function(){location.href = 'test.aspx';}, 5000);

or by adding HTTP header:

Response.AddHeader("REFRESH","5;URL=test.aspx");

or meta tag:

<meta http-equiv="refresh" content="5; url=test.aspx" />

see more info.

If it's a desktop application you could use something like timers. And never make main thread (UI Thread) hangs with something like Thread.Sleep.