2012-04-13 11 views
13

Ich erstelle eine Registerseite für meine Webanwendung. Die Anwendung erfordert, dass nach der erfolgreichen Registrierung eines neuen Kontos auf der Seite die Meldung "Erfolgreich registrieren" angezeigt wird. Warten Sie anschließend 5 Sekunden, bevor Sie zur Anmeldeseite wechseln. Ich habe Thread.Sleep(5000) verwendet. Es wartet 5 Sekunden, aber es zeigt die Nachricht nicht an. Kann mir jemand helfen?Zeitverzögerung vor Umleitung

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? Andere? Bitte markieren Sie die Tags entsprechend, da sie sich auf die Antworten auswirken, die Sie erhalten. – Yuck

+0

Warum werden Sie nicht sofort auf die Registerseite umgeleitet, mit einem Flag, das "Register Successful" anzeigt; Umleiten mit einem GET-Parameter von? Register = true oder etwas, um die Flagge zu zeigen, ist genug. Dies ist auch viel benutzerfreundlicher. – Bowersbros

Antwort

28

Thread.Sleep(5000) bricht nur der Thread für 5 Sekunden - kein Code auf diesen Thread wird während dieser Zeit ausgeführt werden. Also keine Nachrichten oder irgendetwas anderes.

Wenn es sich um eine ASP.NET-App handelt, weiß der Client nicht, was auf dem Server vor sich geht, und wartet 5 Sekunden lang auf die Antwort des Servers. Sie müssen diese Logik manuell implementieren. Zum Beispiel kann entweder mit Hilfe von JavaScript:

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

oder durch Hinzufügen von HTTP-Header:

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

oder meta tag:

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

more info sehen.

Wenn es eine Desktop-Anwendung ist, könnten Sie etwas wie timers verwenden. Und niemals den Hauptthread (UI-Thread) mit etwas wie Thread.Sleep hängen lassen.

+2

Persönlich bevorzuge ich den HTTP-Header, also vote ++ – Giuliano

+0

Danke Lorond, die Erklärung ist sehr klar und leicht zu verstehen. Ich werde versuchen, diese Vorschläge zu verwenden. – user1331344

+0

Was ist, wenn es sich um ein Login-Formular handelt und es sich um ein Updatepanel handelt? Ich habe die obige Methode ausprobiert und es hat mich nicht umgeleitet:/ – SearchForKnowledge

0

nur Meta-Tag ist genug, um zu einer anderen Seite

Anzeige Meta-Tag

dynamisch

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

Dieser Code umgeleitet wird Anzeige ein Meta-Tag auf der aktuellen Seite und die Seite auf eine andere Seite umgeleitet wird angegebene Zeit wie oben.

+0

Wer hat diese -2 Marke? –