回答編集履歴
1
回答に追記
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
|
+
これがどういう結果になるかは想像に難くないでしょう。
|