- ベストアンサー
VB2010で時間のかかる処理をする場合
vb2010で開発しています。 時間のかかる処理をするのに、プログレスバーやアニメーションgifを使って 処理をしていることをユーザ側に知らせたいのですが、うまくいきません。 BackgroundWorkerという機能を使うというのはネットで調べたのでが、 それはLOOP等で繰り返し行う処理の場合はできそうなのですが、 今回はSQLSERVERに対して、DELETEやUPDATEを実行したいのです。 SQLを発行するのは一回なのですが、データ量が多いために時間がかかります。 それをうまく処理できる方法はありませんか?
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
BackgroundWorkerはワーカースレッドを簡単に扱うように用意された物です。 繰り返し処理のみに使うような,用途の限定された物ではありません。 単純にBackgroundWorkerでもよいですし,Taskでもよいでしょう。 SqlCommandにはBeginExecuteNonQuery等のAPM型APIもありますから,こちらを使う方法もありますし,APM型APIをTaskに変換する方法もあります。 ちなみに,C# 5.0のasync/awaitはTaskを使った方法になります。 References) MSDN: Task クラス (System.Threading.Tasks) http://msdn.microsoft.com/ja-jp/library/system.threading.tasks.task(v=vs.100) MSDN: SqlCommand.BeginExecuteNonQuery メソッド (AsyncCallback, Object) (System.Data.SqlClient) http://msdn.microsoft.com/ja-jp/library/7b6f9k7k(v=vs.100) MSDN: SqlCommand.EndExecuteNonQuery メソッド (System.Data.SqlClient) http://msdn.microsoft.com/ja-jp/library/system.data.sqlclient.sqlcommand.endexecutenonquery(v=vs.100) MSDN: TPL と従来の .NET 非同期プログラミング http://msdn.microsoft.com/ja-jp/library/dd997423(v=vs.100) MSDN: TaskFactory.FromAsync メソッド (Func(AsyncCallback, Object, IAsyncResult), Action(IAsyncResult), Object) (System.Threading.Tasks) http://msdn.microsoft.com/ja-jp/library/dd321427(v=vs.100) MSDN: Task.ContinueWith メソッド (Action(Task), TaskScheduler) (System.Threading.Tasks) http://msdn.microsoft.com/ja-jp/library/dd321307(v=vs.100) MSDN: TaskScheduler.FromCurrentSynchronizationContext メソッド (System.Threading.Tasks) http://msdn.microsoft.com/ja-jp/library/system.threading.tasks.taskscheduler.fromcurrentsynchronizationcontext(v=vs.100)
お礼
ありがとうございます。 BackgroundWorkerやTaskは私にはまだ難しいようです。 理解不能でした。さらに勉強して挑戦してみます。 今回はSQLの非同期実行、BeginExecuteNonQueryを利用し 希望通りにできました。