質問するログイン新規登録

回答編集履歴

1

回答に追記

2019/06/08 04:37

投稿

y_waiwai
y_waiwai

スコア88182

answer CHANGED
@@ -1,3 +1,15 @@
1
1
  DoEventsメソッドは、Windowsのメッセージ処理を行うものです
2
2
  これを使ってはいけない、というよりは、あんましこれを多用してはいけない、ってことだと思います。
3
- まあ、このメソッドの功罪を知った上で、適切に使うぶんには問題はないと思ってます。
3
+ まあ、このメソッドの功罪を知った上で、適切に使うぶんには問題はないと思ってます。
4
+
5
+ ---
6
+ WindowsのGUIは、Windowsメッセージで駆動されながら動いてます
7
+ 何かの時間のかかる処理を行ってるときは、GUIは動かなくなりますが、これはメッセージ処理が行われなくなるから止まってしまうんですね
8
+
9
+ なら、時間のかかる処理のループの中で、このDoEventsを呼べばGUIは止まらないんじゃないの?
10
+ という考えは正しいです
11
+ ところが、考えなしにこれを多用すると厄介なバグを生むことになります
12
+
13
+ ボタンクリックイベントの中で時間のかかる処理を行います。その中でDoEventsでムリヤリGUIを動かしますと、その中でまた別のボタンクリックイベントが呼び出され、別の時間のかかる処理が始まり、またその中のイベントによってまた処理が、、と、イベントが終了しないうちにいろんな処理が、中断された状態で存在するようになります。
14
+
15
+ これがどういう結果になるかは想像に難くないでしょう。