Поток пользовательского интерфейса может быть перегружен количеством вызовов на
Application.DoEvents();
, поскольку они происходят в цикле while, и нет времени помещать новый элемент в DOM, так как поток занят DoEvent()
.
Вы можете регулировать (замедлять) вызовы, используя
window.setInterval()
или
window.setTimeout()
Вы должны выполнить проверку в функции обратного вызова и указать количество времени, которое может быть довольно маленьким, но не равным 0.
Как только поток выходит из обратного вызова, у него есть время, чтобы заняться другими делами, например, снова позаботиться о dom.
С помощью window.setTimeout () вы можете выполнить проверку и запланировать следующий обратный вызов прямо из предыдущего.
Другой возможностью может быть использование
Thread.Sleep()
но это может привести к нежелательным побочным эффектам.
Самым чистым и современным решением было бы использование Mutation Observer API , который получил большую поддержку браузеров.
Если вы не возражаете против использования фреймворков, я предлагаю jQuery, который имеет функции именно для того, что вам нужно, и использует Mutation Observer API, если он доступен, и несколько полифилов для браузерных загрузчиков, таких как IE; -)