Warum müssen UI-Elemente immer über den UI-Thread erstellt / aktualisiert werden?

7

Warum müssen UI-Elemente immer über den UI-Thread erstellt / aktualisiert werden?

In (fast?) allen UI-Elementen der Programmiersprachen kann sicher nur vom UI-Thread aus zugegriffen werden. Ich verstehe, dass es sich um ein Standardproblem bei gleichzeitigem Zugriff und Synchronisierung handelt, aber ist es wirklich notwendig? Wird dieses Verhalten von den Programmiersprachen oder vom Betriebssystem auferlegt? Gibt es Programmiersprachen, in denen diese Situation anders ist?

    
MicSim 18.07.2009, 18:30
quelle

3 Antworten

9

Es wird durch das Grafik-Framework auferlegt - welches oft (aber nicht immer) vom Betriebssystem bereitgestellt wird.

Grundsätzlich ist es ineffizient, alles "richtig threadsafe" zu machen. Es ist zwar ein Problem, Aufrufe an den UI-Thread zurückzuleiten, aber der UI-Thread selbst kann Ereignisse sehr schnell verarbeiten, ohne sich um Sperren usw. kümmern zu müssen.

    
Jon Skeet 18.07.2009, 18:35
quelle
6

Es wäre sehr teuer (langsam), die gesamte Benutzeroberfläche threadsicher zu machen. Besser ist es, den Programmierer dazu zu bringen, in dem (relativ seltenen) Fall, in dem ein Thread die Benutzeroberfläche aktualisieren muss, eine Synchronisierung durchzuführen.

    
Henk Holterman 18.07.2009 18:36
quelle
5

Es liegt daran, dass das UI-Framework auf diese Weise entworfen wurde. Es ist theoretisch möglich, ein UI-Framework zu entwerfen, das wirklich Multi-Threading ist, aber Deadlocks können schwer vermieden werden.

Graham Hamilton hat einen schönen Artikel dazu in Bezug auf Swing geschrieben, das wichtigste Java-UI-Framework.

    
Simon Nickerson 18.07.2009 18:38
quelle