SqlCommandで BeginExecuteNonQueryを使用してコマンドを非同期で実行できます およびEndExecuteNonQuery 。後者は完了するまでブロックします。ただし、これではバックアップの進行状況に関するサーバーからの進行状況は報告されません。マーキーの進行状況バーを使用します。
EndExecuteNonQueryを回避するには UIをブロックしないように(処理方法によって異なります)、バックグラウンドスレッドが必要になります。これを使用する場合は、BeginXXXを使用しない方がよいでしょう。 EndXXX メソッドを実行し、バックグラウンドスレッドで同期的に実行します-BackgroundWorker これに最適です。
EndXXXでブロックする代わりに、UIでバックグラウンドスレッドを使用しないようにするため コールバックを登録し、結果のイベントを処理する必要があります(EndXXXを呼び出す) このイベントハンドラーでは、ただしすぐに戻ります)。
更新: コメントによると、SQLコマンド/接続関連のものへの非同期呼び出しの場合、接続文字列にできるだけ多くを指定する必要があります:
https://www.connectionstrings.com/sql-server-2008
Server=myServerAddress; Database=myDataBase; Integrated Security=True; Asynchronous Processing=True;
または、接続文字列ビルダーを使用したコード:
builder.AsynchronousProcessing = true;