很可能我的問題一般無法得到解答,如果是的話,無論如何這都是有趣的信息。我試圖更好地理解UI控件交互,特別是非UI線程執行什麼和什麼是不允許的。在我的情況下,我正在與WPF控件和位於Microsoft.Office.Interop命名空間中的對象(代表控件)進行交互。我在模型圖層中的後臺線程上做了很多工作,但是當我的視圖模型中接收到事件時,我正在調度UI線程(通常在使用綁定到WPF控件的屬性時) 。這對我來說是有意義的,它似乎運作良好。然而,我不確定後臺線程可以做什麼和不能做什麼。本質上,我試圖瞭解邊界在哪裏。爲了發揮想象力,請參閱下面的一些問題。我明白我的要求有些開放式,所以如果有人知道我可以閱讀的外部資源,那對我來說也是一樣的好。UI線程vs後臺線程 - UI控件可訪問性邊界
- 我可以
get()
從後臺線程綁定到用戶界面的屬性,即是隻set()
必須從UI線程來完成? - 如果我有一個互操作對象,比如說Microsoft.Office.Interop.Slide,在我看來,我必須在UI線程上與它交互,因爲它是一個實際的UI控件。但是,我可以聽聽在非UI線程中返回這些對象的事件嗎?我可以從非UI線程檢查幻燈片爲null嗎?對於來自非UI線程的Slide類型中包含的屬性,我可以嗎?
總之,在後臺線程和UI線程之間切換時,我能記住一條好規則嗎?例如「更改必須在UI線程上完成的任何動作」或「直接交互的任何動作,而不管動作(例如檢查是否爲null
)必須在UI上完成線」。
感謝漢斯,我會接受你的回答。清理爲什麼屬性獲取者可能會危險地調用工作線程特別有用! –