Ein Stack ist
Last In First Out. Also es wird etwas oben drauf gepackt und das muss auch als Erstes wieder entfernt werden. (Bücherstapel)
Das Synchronize arbeitet aber mit einer Liste bei der das erste Element entfernt wird und alle anderen durch Add hinzugefügt werden. Also
First In First Out. Und das ist eine klassische Liste oder auch Queue. (Warteschlange)
@Green: Knallen tut es unter anderem auch deswegen, weil die Paintboxen zwar unterschiedliche Objekte sind aber diese liegen alle auf dem gleichen Fenster. Und Paintboxen sind im Vergleich zu einem Panel kein echtes Windowsfenster. Sondern "lediglich" eine Kappselung eines Canvas. Damit zeichnen alle Threads auf das gleiche Windowsfenster. Erschwerend kommt hinzu, dass die
GDI nur Anwendungsübergreifend sicher ist. Aber innerhalb einer Anwendung nicht Threadsafe ist.
Es muss nicht immer knallen. Ich hatte schon mal das Phänomen, dass er einfach aufgehört hat zu zeichnen. Vollkommen willkührlich. Das macht das Problem auch so unberechenbar und gefährlich.