Почему элементы пользовательского интерфейса всегда должны создаваться / обновляться из потока пользовательского интерфейса? - PullRequest
7 голосов
/ 18 июля 2009

Почему элементы пользовательского интерфейса всегда должны создаваться / обновляться из потока пользовательского интерфейса?

В (почти?) Всех элементах пользовательского интерфейса языков программирования можно безопасно получить доступ / изменить только из потока пользовательского интерфейса. Я понимаю, что это стандартная проблема одновременного доступа и синхронизации, но действительно ли это необходимо? Это поведение навязывается языками программирования или операционной системой? Есть ли языки программирования, где эта ситуация отличается?

Ответы [ 3 ]

9 голосов
/ 18 июля 2009

Это наложено графической структурой - которая часто (но не всегда) поставляется операционной системой.

По сути, делать все "должным образом защищенным от потоков" неэффективно. Несмотря на то, что доставлять вызовы обратно потоку UI, безусловно, очень сложно, он позволяет самому потоку UI обрабатывать события чрезвычайно быстро, не беспокоясь о блокировке и т. Д.

6 голосов
/ 18 июля 2009

Было бы очень дорого (медленно) сделать весь пользовательский интерфейс потокобезопасным. Лучше возложить бремя синхронизации на программиста в (относительно редком) случае, когда поток должен обновить интерфейс.

5 голосов
/ 18 июля 2009

Это потому, что фреймворк UI спроектирован таким образом. Теоретически возможно спроектировать структуру пользовательского интерфейса, которая является действительно многопоточной, но трудно избежать тупиков.

Грэм Хэмилтон написал хорошую статью об этом со ссылкой на Swing, основную среду Java UI.

...