Di SqlCommand
. Anda anda dapat menjalankan perintah secara asinkron menggunakan BeginExecuteNonQuery
dan EndExecuteNonQuery
. Yang terakhir akan memblokir sampai selesai. Namun ini tidak akan melaporkan kemajuan dari server tentang bagaimana pencadangan berlangsung - saya akan menggunakan bilah kemajuan tenda untuk itu.
Untuk menghindari EndExecuteNonQuery
dari memblokir UI Anda (tergantung bagaimana Anda menanganinya), Anda akan memerlukan utas latar belakang. Jika Anda menggunakan ini maka Anda sebaiknya tidak menggunakan BeginXXX
EndXXX
metode dan melakukannya secara sinkron di utas latar belakang - BackgroundWorker
yang terbaik untuk ini.
Untuk menghindari penggunaan utas latar belakang di UI, alih-alih memblokir di EndXXX
Anda perlu mendaftarkan panggilan balik dan menangani acara yang dihasilkan (memanggil EndXXX
di event handler ini, tetapi akan segera kembali).
Pembaruan: sesuai komentar, untuk panggilan asinkron ke perintah SQL/koneksi, Anda perlu menentukan sebanyak mungkin dalam string koneksi:
http://www.connectionstrings.com/sql-server-2008
Server=myServerAddress; Database=myDataBase; Integrated Security=True; Asynchronous Processing=True;
Atau dalam kode menggunakan pembuat string koneksi:
builder.AsynchronousProcessing = true;