细说UI线程和Windows消息队列
在Windows应用程序中,窗体是由一种称为"UI线程(User Interface Thread)"的
特殊类型的线程创建的。
首先,UI线程是一种"线程",所以它具有一个线程应该具有的所有特征,比如有
一个线程函数和一个线程ID。
其次,"UI线程"又是"特殊"的,这是因为UI线程的线程函数中会创建一种特殊的
对象--窗体,同时,还一并负责创建窗体上的各种控件。
窗体和控件大家都很熟悉了,这些对象具有接收用户操作的功能,它们是用户使
用整个应用程序的媒介,没有这样一个媒介,用户就无法控制整个应用程序的运行和
停止,往往也无法直接看到程序的运行过程和最终结果。
那么,窗体和控件又是如何作到对用户操作进行响应的呢?这一响应是不是由窗
体和控件自己"主动"完成的?
换句话说:
窗体和控件具不具备独立地响应用户操作(比如键盘和鼠标操作)的功能?
答案是否定的。
那就奇怪了,比如我们用鼠标点击了一个按钮,并且看到它"陷"下去了,然后又
还原,之后,我们确实看到了程序执行了此按钮所对应的任务。难道不是按钮来响应
用户操作的吗?
这实际上是一个错觉。这个错觉产生的根源在于不了解Windows内部的运作机理
。