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

时间:2009-07-18 18:30:52

标签: multithreading user-interface language-agnostic operating-system

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

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

3 个答案:

答案 0 :(得分:9)

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

基本上,使所有“正确线程安全”效率低下。虽然将调用回调到UI线程当然很麻烦,但它允许UI线程本身非常快速地处理事件而不必担心锁定等。

答案 1 :(得分:6)

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

答案 2 :(得分:5)

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

Graham Hamilton参考了主要的Java UI框架Swing,写了一篇很好的文章。