no-image

【C#】while構文を使うとフォームが固まるトラブルの解決方法

whileでフォームが固まってしまうのを解決するには Application.DoEvents();メソッドを使用する

whileで条件が整うまで待ちたいことがあります。たとえば

while(true){
if(this.count < 5){
break; //this.countが5になったら終了
}
}

しかしwhile構文をWindows Form Applicationで使用するとフォームがフリーズしてしまいます。これを解決するには Application.DoEvents()メソッドを一行そえるだけで解決します。

while(true){
if(this.count < 5){
break;
}
Application.DoEvents();
}

詳しい仕組みはわからないのですが Application.DoEvents() には蓄積した処理をはきださせるような仕組みがあるみたいです。以下のサイトがApplication.DoEvents()メソッドについて詳しくかかれています。

時間がかかる処理での「応答なし」を回避するには?:.NET TIPS – @IT

なぜフリーズしてしまうのかについても詳しく解説しているサイトがあったのですが、話が難しく理解できなかったので省略します。