日期:2014-05-18  浏览次数:20687 次

请教一下禁止跨线程调用控件的原因
这里我希望各位能给我详细解释一下如题所述的问题,当然在书上和网上都说如果跨线程调用控件的话会因为多个线程同时更改控件的状态而造成控件状态不一致,所以要禁止!
  但我对这个说法有点不理解,因为在windows里面控件的行为都是基于消息的,而消息是从消息队列里面来,由于队列的性质,我认为就保证了控件的调用的时间问题,不会存在同时更改的问题。
  再者,因为只有UI线程具有消息循环来进行有关控件消息的处理,所以对于控件的调用,我感觉最后无论如何都是回归到UI线程上的啊?则所有控件的访问都处于创建线程下了,应该是不会有问题的!
  如果我上述说法错误的话,那禁止跨线程访问控件的真正原因又是什么呢?另外是不是每个线程都会有自己的一个消息队列呢?

------解决方案--------------------
我给你打个比方好了,这就好比如说你去邮局去存钱,你排到窗口然后跟小妞递上卡片和现金,然后说一声“我存钱”这就行了。你管这银行(总行)内部的计算机运作干什么?

你使用.net的控件系统,不是在学什么c++编程。从实际测试角度,这个就是存在并发问题,先从终端出发来考虑问题,然后再必要时再去纠结什么“windows消息”概念。