重い処理でフォームが固まらないようにする

概要

Windows Formアプリケーションで時間のかかる処理や計算量の多い処理をするとフォームが固まり、クリックなどのユーザーからの操作に応答しなくなることがあります。
以下の対策があります。

Application.DoEvents() を用いる方法

ループ処理の場合、ループ1回ごとにApplication.DoEvents()を呼び出してメッセージキューにたまったウィンドウメッセージを処理する方法です。

backgroundWorkerコントロールを用いる方法

backgroundWorkerコントロールを使用して別スレッドで時間のかかる処理を実行します。backgroundWorkerの使い方についてはこちらの記事を参照してください。

非同期メソッドを利用する方法

C# 5.0以降では、非同期メソッドが利用できます。非同期メソッドを利用するとUIのメインスレッドと非同期で処理を実行でき、UIのフリーズを防げます。 実装コードはこちらの記事を参照してください。

AuthorPortraitAlt
著者
iPentecのメインプログラマー
C#, ASP.NET の開発がメイン、少し前まではDelphiを愛用
作成日: 2009-02-18
改訂日: 2024-05-21
Copyright © 1995–2025 iPentec all rights reserverd.