Per gestire chiamate asincrone, ci sono diverse possibilità.
Visto che Alex ti ha già proposto la soluzione puramente ajax, io ti propongo una soluzione che utilizza Thread separati ed il partialrendering della pagina con un polling per verificare lo stato.
Purtroppo non è possibile utilizzare la classe System.ComponentModel.BackgroundWorker, poiché in asp.net non ci da il risultato che ci aspettiamo, ovvero la pagina non termina fino a che non termina anche il backgroundWorker (tutto si ferma al PreRenderComplete).
Allora ci facciamo una classe che fa più o meno la stessa cosa, utilizzando un Thread separato:
Per utilizzare questa classe bastano poche righe di codice, e memorizziamo il tutto in session:
BackgroundWorker worker = new BackgroundWorker();
worker.DoWork += new BackgroundWorker.DoWorkerEvH(worker_DoWork);
worker.RunWorker("eventuale parametro di input");
Session["worker"] = worker;
Timer1.Enabled = true;
Questo codice può essere eseguito ad esempio al click di un pulsante, rigorosamente dentro un UpdatePanel assieme ad un timer (sidabilitato).
Il timer eseguirà appunto il polling per leggere in session il valore progress del worker ed anche il risultato finale.
Di seguito la procedura da far eseguira al worker ed un esempio di lettura da parte del timer:
void worker_DoWork(ref int progress, ref object result, params object[] args)
{
string input = string.Empty;
if (args.Length > 0)
input = args[0].ToString();
//una operazione che richiede tempo
//esempio un ciclo di 10 secondi
for (int i = 0; i < 100; i++)
{
Thread.Sleep(100);
progress++;
}
result = string.Format("Input: \"{0}\". - Operazione completata.", input);
}
protected void Timer1_Tick(object sender, EventArgs e)
{
BackgroundWorker worker = (BackgroundWorker)Session["worker"];
if (worker != null)
{
//visualizzare il progress con una semplice label o con una progressBar
//lblProgress = string.Concat("percentuale: ", worker.Progress, "%");
Timer1.Enabled = worker.Progress < 100;
}
}
____________
Ricordati di utilizzare il tasto "Accetta" se i nostri consigli ti sono serviti a risolvere il problema.
È il modo per ringraziare chi ti ha aiutato.