Ответ 1
В SqlCommand
вы можете запускать команды асинхронно с помощью BeginExecuteNonQuery
и EndExecuteNonQuery
. Последний будет блокироваться до его завершения. Однако это не будет сообщать о прогрессе с сервера о том, как происходит резервное копирование - я бы использовал для него индикатор выполнения marquee.
Чтобы не блокировать 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;