在线程里能操作UI吗?解决方案

在线程里能操作UI吗?
在线程里能操作UI吗?如果不能,为什么?
------解决方案--------------------
引用:
因为MFC设计的时候没有考虑线程安全。


    其实也不能算MFC设计的问题,MFC类库(大部分例如CWnd之类的)只是封装了对窗口句柄的操作而已,但是如果多个线程同时操作一个界面,就会乱套了。比如这个线程在Paint,另一个线程同时也要Paint,怎么办。所以使用了线程局部存储(TLS),只允许操作本线程创建的MFC对象。如果是SDK编程,线程操作窗口的时候,还不是得乖乖的SendMessage或者PostMessage。
    MFC库里面已经使用了大量的SendMessange了,这些函数是线程安全的。比如CTreeCtrl。

    如果非要在线程里面操作窗口对象,就要锁。可是太多锁写在“基础类库”里就太影响效率了,也不符合MFC设计的初衷。
    
------解决方案--------------------
引用:
不能,SendMessage给ui线程


最好是用PostMessage在线程里能操作UI吗?解决方案
------解决方案--------------------
是行的,看你个人需求呀。
不过要非常注意窗口的消息是以线程周期存在。
千万不要在子线程中创建一个新窗口,除非有子线程有消息循环。