| Andrea Cassone |
Progress bar per le WebForm
Salve a tutti.
Sto sviluppando una pagina aspx che fa delle elaborazioni dati tramite delle stored procedure. Siccome queste stored procedure sono circa una ventina ed elaborano una grossa mole di dati, mi trovo nella situazione in cui l'utente che fa partire tale processo ha un lungo tempo di attesa senza avere nessuna informazione a video che gli indichi a che punto si trova l'elaborazione, visto che il principio delle pagine ASP è quello di essere inviate al client solamente dopo essere state elaborate completamente. Qualcuno conosce un modo per informare l'utente sul progresso dell'elaborazione?? Grazie Saluti Andrea Cassone |
| Fabio Santini |
Re: Progress bar per le WebForm
L'unico modo che mi viene in mente in questo momento è quello di creare una pagina aspx composta da due frame. La form presente sul primo frame esegue il post che fa scatenare la procudura lenta e che durante la sua esecuzione aggiorna una variabile di sessione con la percentuale di completamento . La stessa form potrebbe impostare un timer (diciamo ogni 5 secondi). Intercettando nel browser l'evento del timer , puoi richiedere al secondo frame di navigare su un certo url.
In questo modo ogni 5 secondi ottiene una richiesta verso il server. A questo punto potresti recuperare nella variabile di sessione la percentuale di completamento del lavoro e mostrare a video una progress bar. |
| Andrea Cassone |
Re: Progress bar per le WebForm
Grazie Fabio per la risposta!!
In realta vorrei evitare i frame, perchè vorrei creare una procedura standard da richiamare ogni volta che mi serve, magari creando un metodo nella pagina che eredito!! Una soluzione che stavo pensando era quella di chiamare una pagina aspx di attesa utilizzando magari la logica che tu mi hai descritto, evitando di utilizzare codice javascript client side, ma aprirla e comandarla da codice server side! Tu pensi che una cosa del genere sia possibile? Grazie Andrea Cassone |
| Fabio Santini |
Re: Progress bar per le WebForm
Secondo me devi comunque scrivere del codice lato client (magari creando un web control che lo fa in automatico) per gestire la temporizzazione delle chiamate. La chiamata ad una pagina aspx comunque termina e quindi se vuoi gestire una progress bar devi comunque fare più chiamate e l'unico modo per fare questo è gestire il timer del client. Secondo me in ogni caso costruendoti un web control puoi creare una procedura generica.
|
| Andrea Cassone |
Re: Progress bar per le WebForm
Per quanto riguarda la temporizzazione delle chiemate per la gestione della progress bar, del codice lato client penso che sia inevitabile, ma questo lo farei in una pagina (standard) di attesa, magari come tu mi suggerivi, con l'appoggio delle variabili session e/o con un web control!! Quello che mi interessava sapere è se si può gestire una chiamata a questa pagina di attesa direttamente da codice server...ad esempio come lo show di un form in VB.
Grazie Andrea Cassone |
| Fabio Santini |
Re: Progress bar per le WebForm
Perdonami ma non ho capito quello che vuoi fare (sarà l'età!!!!)
|
| Andrea Cassone |
Re: Progress bar per le WebForm
Ci provo!
Nello sviluppo dei miei applicativi ASP.NET ho praticamente creato una mia pagina (System.Web.UI.MyPage) da ereditare, che a sua volta eredita dalla Stystem.Web.UI.Page di microsoft. Cosi facendo ho la possibilità di creare, tra le altre cose, dei metodi personalizzati...e su questa scia vorrei crearmi un metodo di attesa da utilizzare quando eseguo delle elaborazioni onerose lato DB. Considerando di avere questa situazione: 1) MyPage (da ereditare) 2) PageWait.aspx (pagina di attesa) il metodo dovrebbe semplicemente aprire la PageWait.aspx che al suo interno ha tutta la gestione della progress bar (web control/session). Quello che ancora non sono riuscito a fare (a capire) è come aprire la PageWait.aspx da codice server (VB.NET)...ad esempio quello che si fa lato client con javascript con windows.open. Spero di essere stato abbastanza esplicativo Grazie per l'attenzione Andrea Cassone |
| Fabio Santini |
Re: Progress bar per le WebForm
Se ho capito bene :
1) nella pagina (pg1) che eredita dalla tua c'è il codice lento 2) L'utente attiva l'esecuzione del codice lento dalla pg1 3) A livello server il code behind di pg1 deve partire e ridirezionare l'utente su un'altra pagina che mostrerà la progress bar. Ecco come puoi fare. // Pulsante di risposta all'evento della pagina pg1 private void Button1_Click(object sender, System.EventArgs e) { // Sei costretto a creare un thread di lavoro altrimenti Response.Redirect // interrrompe immediatamente l'esecuzione della pagina // Worker è una funzione locale alla pagina che esegue il lavoro lento Thread th = new Thread(new ThreadStart(Worker)); // Fai partire il Thread th.Start(); // A questo punto ridirezioni l'utente sulla tua pagina che mostrerà la progress bar Response.Redirect("WebForm2.aspx"); // Qualunque codice inserito qui non verrà eseguito } private void Worker() { // In questa funzione metti il codice oneroso for (int i=0;i<10000;i++) Debug.WriteLine(String.Format("ok {0}",i)); } Spero di averti aiutato. Ciao |
| Andrea Cassone |
Re: Progress bar per le WebForm
Ci siamo quasi.
i punti 1 e 2 vanno bene, il punto tre no!! Quello che vorrei fare e di aprire (no redirect) una pagina di attesa pg2 (una pagina con una progress bar) che segnala l'andamento del processo reperendo le informazioni da una variabile session() la quale viene valorizzata dalla pg1 che ha fatto partire il processo lento (la pg1 rimarrebbe aperta)!! Come si fa ad aprire una pagina da codice server? per farmi capire...quello che si fa con l'istruzione windows.open() da codice client JavaScript. Dici che e' possibile farlo? Grazie Andrea Cassone |
| Fabio Santini |
Re: Progress bar per le WebForm
Il server non può aprire una nuova finestra sul client ne ha senso che la apra sul server !!!
La comunicazione HTTP prevede che sia il client a effettuare delle richieste verso il server e per sua natura il server non può comunicare direttamente con il client ma risponde semplicemente. L'unico modo per aprire una nuova finestra sul client è quello di scrivere del codice script che giri all'interno del browser e che si occupi di eseguire questo tipo di operazione. |
| Andrea Cassone |
Re: Progress bar per le WebForm
Ciao Fabio,
Adesso provero' a costruire un apagina di attesa e la farò interagire con il processo lento tramite le variabili session, sfruttando anche i thread. grazie per l'attenzione! Andrea |