为什么必须始终从UI线程创建/更新UI元素?

Mic*_*Sim 7 language-agnostic user-interface multithreading operating-system

为什么必须始终从UI线程创建/更新UI元素?

在(几乎?)所有编程语言中,UI元素只能从UI线程安全地访问/修改.我知道这是一个标准的并发访问和同步问题,但它真的有必要吗?这种行为是由编程语言还是操作系统强加的?有没有这种情况不同的编程语言?

Jon*_*eet 9

它由图形框架强加 - 通常(但不总是)由操作系统提供.

基本上,使一切"正确线程安全"是低效的.虽然将调用回调到UI线程当然很麻烦,但它允许UI线程本身非常快速地处理事件而不必担心锁定等.


Hen*_*man 6

使整个UI线程安全非常昂贵(缓慢).最好让程序员的负担在线程需要更新UI的(相对罕见的)场合同步.


Sim*_*son 5

这是因为UI框架就是这样设计的.理论上可以设计一个真正多线程的UI框架,但很难避免死锁.

Graham Hamilton在参考Swing(一个主要的Java UI框架)时写了一篇很好的文章.