Em seu
SqlCommand
você pode executar comandos de forma assíncrona usando BeginExecuteNonQuery
e EndExecuteNonQuery
. O último irá bloquear até que seja feito. No entanto, isso não relatará o progresso do servidor sobre como o backup está indo - eu usaria uma barra de progresso de letreiro para isso. Para evitar o
EndExecuteNonQuery
de bloquear sua interface do usuário (dependendo de como você lida com isso), você precisará de um thread em segundo plano. Se você usar isso, também não poderá usar BeginXXX
EndXXX
métodos e fazê-lo de forma síncrona em um thread em segundo plano - o BackgroundWorker
é melhor para isso. Para evitar o uso de um thread em segundo plano na interface do usuário, em vez de bloquear em
EndXXX
você precisará registrar um retorno de chamada e manipular o evento resultante (chamando EndXXX
neste manipulador de eventos, mas ele retornará imediatamente). Atualização: conforme um comentário, para chamadas assíncronas no comando/conexão SQL, você precisa especificar tanto na string de conexão:
http://www.connectionstrings.com/sql-server-2008
Server=myServerAddress; Database=myDataBase; Integrated Security=True; Asynchronous Processing=True;
Ou no código usando o construtor de string de conexão:
builder.AsynchronousProcessing = true;