En tu SqlCommand
puede ejecutar comandos de forma asíncrona usando BeginExecuteNonQuery
y EndExecuteNonQuery
. Este último se bloqueará hasta que esté listo. Sin embargo, esto no informará el progreso del servidor sobre cómo va la copia de seguridad; usaría una barra de progreso de marquesina para ello.
Para evitar el EndExecuteNonQuery
de bloquear su interfaz de usuario (dependiendo de cómo lo maneje), necesitará un hilo de fondo. Si usa esto, es mejor que no use BeginXXX
EndXXX
métodos y hacerlo sincrónicamente en un subproceso de fondo - el BackgroundWorker
es mejor para esto.
Para evitar el uso de un hilo de fondo en la interfaz de usuario, en lugar de bloquear en EndXXX
deberá registrar una devolución de llamada y manejar el evento resultante (llamar a EndXXX
en este controlador de eventos, pero regresará inmediatamente).
Actualización: según un comentario, para llamadas asincrónicas al comando SQL/cosas de conexión, debe especificar tanto en la cadena de conexión:
http://www.connectionstrings.com/sql-server-2008
Server=myServerAddress; Database=myDataBase; Integrated Security=True; Asynchronous Processing=True;
O en código usando el generador de cadenas de conexión:
builder.AsynchronousProcessing = true;