In Ihrem SqlCommand
Sie können Befehle mit BeginExecuteNonQuery
asynchron ausführen und EndExecuteNonQuery
. Letzteres blockiert, bis es fertig ist. Dies wird jedoch nicht den Fortschritt des Servers darüber melden, wie die Sicherung abläuft - ich würde dafür einen Marquee-Fortschrittsbalken verwenden.
Um die EndExecuteNonQuery
zu vermeiden Um Ihre Benutzeroberfläche nicht zu blockieren (je nachdem, wie Sie damit umgehen), benötigen Sie einen Hintergrund-Thread. Wenn Sie dies verwenden, können Sie BeginXXX
auch nicht verwenden EndXXX
Methoden und tun dies synchron in einem Hintergrund-Thread - dem BackgroundWorker
ist dafür am besten geeignet.
Um die Verwendung eines Hintergrundthreads in der Benutzeroberfläche zu vermeiden, anstatt auf EndXXX
zu blockieren Sie müssen einen Rückruf registrieren und das resultierende Ereignis verarbeiten (Aufruf von EndXXX
in diesem Event-Handler, aber es wird sofort zurückgegeben).
Aktualisierung: Laut einem Kommentar müssen Sie für asynchrone Aufrufe in das SQL-Befehls-/Verbindungsmaterial so viel in der Verbindungszeichenfolge angeben:
http://www.connectionstrings.com/sql-server-2008
Server=myServerAddress; Database=myDataBase; Integrated Security=True; Asynchronous Processing=True;
Oder im Code mit dem Connection String Builder:
builder.AsynchronousProcessing = true;