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