2012-04-13 10 views
13

Creo una página de registro para mi aplicación web. La aplicación requiere que después de que el usuario registre exitosamente una cuenta nueva, la página muestre un mensaje "Registrarse exitosamente", luego espere 5 segundos antes de cambiar a la página de inicio de sesión. Usé Thread.Sleep(5000). Espera 5 segundos pero no muestra el mensaje. ¿Alguien puede ayudarme?Demora de tiempo antes de redirigir

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? ¿Otro? Por favor marque apropiadamente ya que afecta las respuestas que recibirá. – Yuck

+0

¿Por qué no redirige inmediatamente a la página de registro, con una bandera que dice 'Registrarse con éxito'; Redirigir con un parámetro GET de? Register = true o algo así para mostrar la bandera es suficiente. Esto es mucho más amigable para el usuario. – Bowersbros

Respuesta

28

Thread.Sleep(5000) sólo suspende el hilo durante 5 segundos - sin código en este hilo se ejecutará durante este tiempo. Entonces no hay mensajes ni nada más.

Si se trata de una aplicación ASP.NET, el cliente no sabe lo que está sucediendo en el servidor y espera la respuesta del servidor durante 5 segundos. Tienes que implementar esta lógica manualmente. Por ejemplo, ya sea usando JavaScript:

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

o mediante la adición de cabecera HTTP:

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

o meta etiqueta:

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

ver more info.

Si se trata de una aplicación de escritorio puede usar algo como timers. Y nunca hagas que el hilo principal (UI Thread) se cuelgue con algo como Thread.Sleep.

+2

Personalmente, prefiero el encabezado HTTP, así que vote ++ – Giuliano

+0

Gracias Lorond, la explicación es muy clara y fácil de entender. Trataré de usar estas sugerencias. – user1331344

+0

¿Qué pasa si se trata de un formulario de inicio de sesión y está dentro de un panel de actualización? Probé el método anterior y no me redirigió:/ – SearchForKnowledge

0

Sólo etiqueta meta es suficiente para redirigir a otra página

ad etiqueta meta dinámicamente

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

Este código ad una etiqueta meta a la página actual y su página volverá a dirigir a otra página tiempo especificado como arriba.

+0

¿quién hizo esta marca -2? –

Cuestiones relacionadas