2012-04-13 127 views
13

我为我的Web应用程序创建了一个注册页面。该应用程序要求用户成功注册一个新帐户后,页面会显示一条消息“注册成功”,然后等待5秒钟,然后切换到登录页面。我用Thread.Sleep(5000)。它等待5秒钟,但不显示消息。谁能帮我?重定向之前的时间延迟

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

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

ASP .NET WebForms? MVC?其他?请适当标记,因为它会影响您将收到的答案。 – Yuck 2012-04-13 13:15:02

+0

为什么你不立即重定向到注册页面,并且有一个标志'注册成功';使用?register = true的GET参数重定向或显示标志就足够了。这也更加用户友好。 – Bowersbros 2014-10-06 12:24:59

回答

28

Thread.Sleep(5000)只挂起你的线程5秒 - 无码到这个线程会在这段时间内被执行。所以没有消息或其他任何东西。

如果它是一个ASP.NET应用程序,客户端不知道发生了什么事情在服务器上,并等待服务器的5秒响应。你必须手动实现这个逻辑。例如,无论是使用JavaScript:

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

或通过添加HTTP标头:

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

meta标签:

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

more info看到。

如果它是你可以使用类似timers一个桌面应用程序。永远不要让主线程(UI线程)挂起像Thread.Sleep之类的东西。

+2

个人而言,我更喜欢HTTP头,所以投票++ – Giuliano 2012-04-13 13:49:52

+0

谢谢Lorond,这个解释很明确,很容易理解。我会尝试使用这些建议。 – user1331344 2012-04-13 18:18:14

+0

如果它是一个登录表单并且它位于updatepanel内,该怎么办?我试过上面的方法,它没有重定向我:/ – SearchForKnowledge 2015-05-11 18:50:04

0

只有meta标签就足以重定向到另一页

广告meta标签动态

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

此代码将广告元标记当前页面和网页会重定向到另一个页面指定时间如上。

+0

谁做了这个-2标记? – 2015-01-23 08:54:08