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