Във вашия SqlCommand
можете да изпълнявате команди асинхронно с помощта на BeginExecuteNonQuery
и EndExecuteNonQuery
. Последният ще блокира, докато не приключи. Това обаче няма да докладва напредъка от сървъра относно това как върви архивирането - бих използвал лента за напредъка в маркировка.
За да избегнете EndExecuteNonQuery
от блокиране на потребителския ви интерфейс (в зависимост от това как се справяте с него), ще ви трябва фонова нишка. Ако използвате това, можете също така да не използвате BeginXXX
EndXXX
методи и го правете синхронно във фонова нишка - BackgroundWorker
е най-доброто за това.
За да избегнете използването на фонова нишка в потребителския интерфейс, вместо блокиране на EndXXX
ще трябва да регистрирате обратно извикване и да обработите произтичащото събитие (извикване на EndXXX
в този манипулатор на събития, но ще се върне веднага).
Актуализация: според коментар, за асинхронни извиквания в SQL командите/нещата за връзка, трябва да посочите толкова много в низа за връзка:
http://www.connectionstrings.com/sql-server-2008
Server=myServerAddress; Database=myDataBase; Integrated Security=True; Asynchronous Processing=True;
Или в код с помощта на конструктора на низове за връзка:
builder.AsynchronousProcessing = true;