2012-04-13 188 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