回答編集履歴

1

回答に追記

2019/06/08 04:37

投稿

y_waiwai
y_waiwai

スコア88171

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