很可能我的问题一般无法得到解答,如果是的话,无论如何这都是有趣的信息。我试图更好地理解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上完成线”。
感谢汉斯,我会接受你的回答。清理为什么属性获取者可能会危险地调用工作线程特别有用! –