小弟最近无聊,想写个俄罗斯方块玩玩,中途遇到几个问题,很是困惑,忘大侠指点~~
1、一直以为ShowDialog是重新开了个线程,但刚才测试了下,新弹出的窗体还是在原先的线程上运行。看了ShowDialog的源码,发现其是用SendMessage来完成的,但是看了网上的其他帖子又说ShowDialog是利用PostMessage来完成,哪种说法正确呢?
2、ShowDialog后虽然原先的窗体被挂起了,但如果原先窗体上有一个定时器,ShowDialog之后定时器事件依然会继续执行,Timer的实现原理是什么?

解决方案 »

  1.   

    1.sendmessage2.个人理解是timer是开一个子线程,做一个计数器。
      

  2.   

    1.关于Timer
    WinForm的timer是靠WM_TIMER消息的,也就是说你跟系统注册一个timer,系统每隔一定时间将一个
    WM_TIMER消息放到窗口的消息队列中。2.关于ShowDialog()
    其实就是个模态对话框,其实模态对话框用的就是父对话框的消息队列,模态对话框的窗口函数(WndProc)会去处理父窗口消息队列中的消息包括WM_TIMER
    所以,就算父窗体被挂起,父窗体的消息依然会被处理