7

爲什麼必須始終從UI線程創建/更新UI元素?爲什麼必須始終從UI線程創建/更新UI元素?

In(幾乎?)所有編程語言UI元素只能從UI線程安全地訪問/修改。我知道這是一個標準的併發訪問和同步問題,但它真的有必要嗎?這種行爲是由編程語言還是由操作系統強加的?有這種情況不同的程序設計語言嗎?

回答

9

它是由圖形框架強加的 - 通常(但不總是)由操作系統提供。

基本上,使所有「正確線程安全」是低效的。儘管將呼叫編組回到UI線程當然是一種痛苦,但它允許UI線程本身以極快的速度處理事件,而不必擔心鎖定等問題。

+0

對於框架來說,執行檢查和編組調用本身不是更容易嗎,而不是冒着讓別人以不安全的方式調用它的風險? .Net框架至少可以爲我們完成... – ak3nat0n 2009-07-18 18:47:53

6

這樣做會非常昂貴(慢)整個UI線程安全。更好的是讓程序員的負擔在線程需要更新用戶界面的(相對少見的)場合中同步。

5

這是因爲UI框架是這樣設計的。理論上可以設計一個真正多線程的UI框架,但很難避免死鎖。

Graham Hamilton就Swing這個主要的Java UI框架寫了一篇很好的文章。