2 に答える
時間のかかるタスクが別のスレッドで非同期に実行されるように、BackgroundWorkerを使用する必要があります。これにより、WindowsマルチタスクでUIを応答させることができます。アプリケーションがビジーであることをユーザーに知らせるには、待機カーソルまたはその他の視覚的なインジケーターを使用する必要があります。
MSDNからMSDNBackgroundWorker
BackgroundWorkerクラスを使用すると、別の専用スレッドで操作を実行できます。ダウンロードやデータベーストランザクションなどの時間のかかる操作により、ユーザーインターフェイス(UI)が実行中に応答を停止したように見える場合があります。応答性の高いUIが必要で、そのような操作に関連する長い遅延に直面している場合、BackgroundWorkerクラスは便利なソリューションを提供します。
バックグラウンドで時間のかかる操作を実行するには、BackgroundWorkerを作成し、操作の進行状況を報告し、操作が終了したときに通知するイベントをリッスンします。プログラムでBackgroundWorkerを作成することも、ツールボックスの[コンポーネント]タブからフォームにドラッグすることもできます。WindowsフォームデザイナでBackgroundWorkerを作成すると、コンポーネントトレイに表示され、そのプロパティが[プロパティ]ウィンドウに表示されます。
バックグラウンド操作を設定するには、DoWorkイベントのイベントハンドラーを追加します。このイベントハンドラーで時間のかかる操作を呼び出します。操作を開始するには、RunWorkerAsyncを呼び出します。進行状況の更新の通知を受信するには、ProgressChangedイベントを処理します。操作が完了したときに通知を受け取るには、RunWorkerCompletedイベントを処理します。
UI(メイン)スレッドをロックしないように、バックグラウンドスレッドで巨大なタスクを実行する必要があります。