Time delay before redirect

99封情书 提交于 2019-12-03 12:36:31

问题


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
        {
            ...
        }
    }

回答1:


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.




回答2:


Only meta tag is enough to redirect to another page

ad meta tag dynamically

Response.AddHeader("REFRESH", "5;URL=~/account/login");

This code will ad a meta tag to current page and your page will redirect to another page in specified time like above.



来源:https://stackoverflow.com/questions/10141504/time-delay-before-redirect

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!