Dans votre SqlCommand
, vous pouvez exécuter des commandes de manière asynchrone à l'aide de BeginExecuteNonQuery
et EndExecuteNonQuery
. Ce dernier bloquera jusqu'à ce qu'il soit fait. Cependant, cela ne rapportera pas la progression du serveur sur la façon dont la sauvegarde va - j'utiliserais une barre de progression de sélection pour cela. Pour éviter que le EndExecuteNonQuery
ne bloque votre interface utilisateur (en fonction de la façon dont vous la gérez), vous aurez besoin d'un fil d'arrière-plan. Si vous l'utilisez, alors vous pouvez également ne pas utiliser les méthodes BeginXXX
EndXXX
et le faire de manière synchrone sur un thread d'arrière-plan - le BackgroundWorker
est le meilleur pour cela.
Pour éviter d'utiliser un fil d'arrière-plan dans l'interface utilisateur, au lieu de bloquer sur EndXXX
vous devez enregistrer un rappel et gérer l'événement résultant (appelant EndXXX
dans ce gestionnaire d'événements, mais il retournera immédiatement).
Mise à jour: selon un commentaire, pour les appels asynchrones dans la substance commande SQL/connexion, vous devez spécifier autant dans la chaîne de connexion:
http://www.connectionstrings.com/sql-server-2008
Server=myServerAddress; Database=myDataBase; Integrated Security=True; Asynchronous Processing=True;
Ou dans le code en utilisant le générateur de chaîne de connexion:
builder.AsynchronousProcessing = true;
Et vous devez définir builder.AsynchronousProcessing = true; dans le générateur de chaîne de connexion. –
@Quandary +1 merci pour la mise à jour - réponse modifiée pour convenir. –