En su SqlCommand
puede ejecutar comandos de forma asincrónica utilizando BeginExecuteNonQuery
y EndExecuteNonQuery
. Este último bloqueará hasta que esté hecho. Sin embargo, esto no informará el progreso del servidor sobre cómo va la copia de seguridad. Utilizaría una barra de progreso de marquesina para ello.
Para evitar que el EndExecuteNonQuery
bloquee su IU (dependiendo de cómo lo maneje), necesitará un hilo de fondo. Si usa esto, entonces también puede no utilizar los métodos BeginXXX
EndXXX
y hacerlo de forma síncrona en un subproceso en segundo plano: el BackgroundWorker
es el mejor para esto.
evitar el uso de un subproceso de fondo en la interfaz de usuario, en lugar de bloquear el EndXXX
tendrá que registrar una devolución de llamada y controlar el evento resultante (llamando EndXXX
en este controlador de eventos, pero volverá inmediatamente).
Actualización: según un comentario, para las llamadas asincrónicas en la materia de comandos SQL/conexión, es necesario que especifique 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 el código utilizando el generador de cadenas de conexión:
builder.AsynchronousProcessing = true;
y hay que establecer builder.AsynchronousProcessing = true; en el generador de cadenas de conexión. –
@Quandary +1 gracias por la actualización - respuesta modificada para adaptarse. –