Nel tuo SqlCommand
puoi eseguire comandi in modo asincrono usando BeginExecuteNonQuery
e EndExecuteNonQuery
. Quest'ultimo si bloccherà fino al termine. Tuttavia questo non riporterà i progressi dal server su come sta andando il backup:userei una barra di avanzamento di selezione per questo.
Per evitare EndExecuteNonQuery
dal bloccare la tua interfaccia utente (a seconda di come la gestisci), avrai bisogno di un thread in background. Se lo usi, potresti anche non utilizzare BeginXXX
EndXXX
metodi e farlo in modo sincrono su un thread in background:il BackgroundWorker
è il migliore per questo.
Per evitare di utilizzare un thread in background nell'interfaccia utente, invece di bloccare su EndXXX
dovrai registrare una richiamata e gestire l'evento risultante (chiamando EndXXX
in questo gestore di eventi, ma tornerà immediatamente).
Aggiornamento: come per un commento, per le chiamate asincrone al comando SQL/al materiale di connessione, è necessario specificarlo nella stringa di connessione:
http://www.connectionstrings.com/sql-server-2008
Server=myServerAddress; Database=myDataBase; Integrated Security=True; Asynchronous Processing=True;
O nel codice usando il generatore di stringhe di connessione:
builder.AsynchronousProcessing = true;