Такое поведение происходит именно потому, что вы показываете диалог.Чтобы закрыть диалоговое окно, необходимо нажать кнопку «ОК».Это помещает входное сообщение в очередь.После того, как это было обработано, происходит событие OnIdle.И вы снова показываете окно сообщения.И так далее, и так далее.
Вам необходимо убедиться, что вы не делаете ничего, что требует ввода данных пользователем в обработчике OnIdle.В вашем случае попробуйте вывести в журнал, а не показывать диалог, например, OutputDebugString.