
06/05/2005, 02:04
|
| | Fecha de Ingreso: julio-2003
Mensajes: 120
Antigüedad: 21 años, 6 meses Puntos: 0 | |
He encontrado una forma "alternativa" que supongo que no es la correcta, pero a mí me gusta más.
He creado una página intermedia de espera. Se recarga cada 5 segundos, y comprueba una variable de sesión que se llama "MensajeEspera". Si tiene algún valor, la página lo muestra y se sigue recargando, entendiendo que el proceso "largo" sigue en marcha. Si no, considera que ha acabado y redirecciona a una página distinta (que también le paso mediante una variable de sesión).
Ahora bien, lo importante es que el proceso que dura más de dos minutos SE EJECUTA EN UN SUB-PROCESO INDEPENDIENTE. El código que lo lanza es sencillo:
Dim t As New Thread(New ThreadStart(AddressOf ProcedimientoDeLargaDuracion))
t.Start()
El procedimiento ProcedimientoDeLargaDuracion guarda un texto en la variable de sesión "MensajeEspera" mientras está ejecutándose, y la deja a blanco al acabar. Cuando la página de espera, en sus recargas continuas, comprueba que esa variable está a blanco, pasa a la siguiente página.
El código del procedimiento "de larga duración" es este:
Private Sub ProcedimientoDeLargaDuracion()
Dim dMarca As DateTime = Now
Try
Session("MensajeEspera") = "El análisis de los datos puede demorarse unos minutos.<br/>Espere, por favor..."
'... Aquí van las tareas que sean necesarias...
Catch ex As Exception
'... Se trata el error como cada uno crea conveniente
Finally
'IMPORTANTE: PONER A BLANCO LA VARIABLE DE SESIÓN MensajeEspera
' En su próxima recarga, la pantalla de espera redireccionará a la siguiente página válida: el subproceso ya ha terminado
Session("MensajeEspera") = ""
End Try
End Sub
A mí me funciona bien
Última edición por MrRipley; 06/05/2005 a las 02:16 |