Ich vermute, das die Routine 'DyeIcons' nicht immer im Hauptthread aufgerufen wird, insbesondere das udpSocketReceive könnte innerhalb eines (Socket-)Workerthreads aufgerufen werden, da ich den
Indy-Quelltext nicht habe, bin ich mir aber nicht so sicher, aber das würde passen.
Abhilfe: Anstatt immer 'DyeIcon' aufzurufen, setzt Du ein Flag 'fDyeIcons' auf TRUE.
Im Application.OnIdle prüfst Du das Flag, und rufst ggf dort 'DyeIcons' auf (und löscht das Flag natürlich).