当前位置:首页 > 网站建设 > 正文内容

phpcms前台内容显示html代码(php前台实现的功能)

网站建设6个月前 (04-05)273

引言

今天同事问了我一个问题,System.Windows.Forms.Timer是前台线程还是后台线程,我当时想的是它是跟着UI线程一起结束的,应该是前台线程吧?我确实没有仔细研究过他们的异同,所以带着这个疑问探究一下System.Windows.Forms.Timer。

System.Windows.Forms.Timer

机制

System.Windows.Forms.Timer 是 Windows Forms 中的一个定时器控件,它的工作原理基于 Windows 消息循环机制。这个Windows消息循环机制说简单一点就是它有一个消息队列,一个while(true) 循环结构,一个窗口消息处理函数,消息队列保存了在应用程序或系统中发生的各种事件和消息,如鼠标点击、键盘输入、窗口重绘等。循环结构消息队列中不断取出消息。然后通过窗口消息处理函数分发给相应的窗口过程进行处理。

而 System.Windows.Forms.Timer 的事件触发机制如下:

1.Timer 控件利用 Windows 的消息机制来触发 Tick 事件。在定时器启动后,它会在每个 Interval 时间间隔后,将一个 WM_TIMER 消息放入应用程序的消息队列。

2.WM_TIMER 是一个定时器消息,它是由 Windows 消息循环派发的。

3.当应用程序处理消息循环时,当收到 WM_TIMER 消息,就会触发 Timer 的 Tick 事件。

源码解析

来通过源码看一下它的触发机制(这里节选了部分重要函数),它的源码还是比较简单的,仅有300多行。我们先来看一下 System.Windows.Forms.Timer 的调用,一般是这样使用:

我们就按照上面的步骤来剖析一下源码:

第一步:创建实例

这一步并无特别,无参构造默认创建的实例默认 Interval 值为100。含参构造创建时会将该实例添加到参数容器中。

展开全文

第二步:注册Tick

System.Windows.Forms.Timer 声明了一个 onTimer 委托,注册 Tick 是将注册的方法赋值给 onTimer 委托。

第三步:启动Timer

可以看到Timer的 Start 和 Stop,实际都是给 Enabled 赋值,所以我们可以着重看一下 Enabled 属性的 Setter 方法。

第四步:TimerNativeWindow 启动

可以看到System.Windows.Forms.Timer 持有一个 TimerNativeWindow 类型的私有变量,是由这个私有变量启动的Timer

第五步:TimerNativeWindow 实现

上一步中,可以看到当 Enable 置为 true 时,一个 TimerNativeWindow 类型的私有变量调用了 StartTimer(interval) 方法,那么来看一下这个 TimerNativeWindow 的实现。

如下图,可以看到当 TimerNativeWindow 调用 StartTimer时,调用了 SafeNativeMethods.SetTimer 方法,传入了当前Timer的窗口句柄,还有加1后的 _timerID ,以及间隔 Interval。该方法的作用就是向Windows消息循环机制的消息队列中插入一条Timer消息。

上图中,我除了框出了StartTimer方法,还框出了 WndProc(ref Message m) 方法。这个方法就很重要了。这个就是上面所说的 Windows 消息循环机制中的窗口消息处理函数。WndProc(ref Message m) 方法就是一个用于处理窗口消息的回调函数。当窗口接收到不同类型的消息时(例如鼠标事件、键盘事件、绘图事件等,包括Timer的触发事件),窗口过程会被调用来处理这些消息并作出相应的响应。

大家可能会很好奇该方法中的两个判断条件是什么意思?275 和 16 分别代表什么?

phpcms前台内容显示html代码(php前台实现的功能)

实际上这个是Windows消息标识符的十进制值。实际上他们是在名为 WinUser.h 的c++ 头文件中定义的。它随SDK一起安装到电脑上,可以通过Everything 直接找到它。

而我们要找的消息 275 和 16 就是下面这两个

WM_TIMER :其16进制为0x0113,转化为10进制则为275。

WM_CLOSE :其16进制为0x0010,转化为10进制则为16。

这样就可以理解WndProc(ref Message m) 方法的作用了,就是获取到 WM_TIMER 消息时,触发 System.Windows.Forms.Timer 的 OnTick 方法。而获取到 WM_CLOSE 消息时,则调用 StopTimer,结束定时器。

结论

通过上面的机制和源码分析,可以得出结论,System.Windows.Forms.Timer 并不是线程,而是依赖于UIx线程,依赖于Windows消息循环机制而实现的定时器。所以回到开篇的问题,这个问题就有问题,System.Windows.Forms.Timer 并不是线程。

出处:duidaima.com/Group/Topic/ASP.NET/14727

版权声明:本文来源于网友收集或网友供稿,仅供学习交流之用,如果有侵权,请转告小编或者留言,本公众号立即删除。

关注公众号 ↑ ↑ ↑: DotNet开发跳槽 ❀

点分享

点收藏

点点赞

点在看

扫描二维码推送至手机访问。

版权声明:本文由飞速云SEO网络优化推广发布,如需转载请注明出处。

本文链接:http://hon-tex.cn/post/102867.html

分享给朋友:

“phpcms前台内容显示html代码(php前台实现的功能)” 的相关文章

东莞网站制作公司(东莞网站制作公司排名)

东莞网站制作公司(东莞网站制作公司排名)

本篇文章给大家谈谈东莞网站制作公司,以及东莞网站制作公司排名对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。 本文目录一览: 1、东莞网站制作哪家好? 2、东莞企业建站哪个好 3、网站设计去哪选好 东莞网站制作哪家好? 每个地方都会有网站建设公司先去网上搜一下,然后一家家的对比看公司...

招生宣传单模板简洁(招生传单设计模板)

招生宣传单模板简洁(招生传单设计模板)

本篇文章给大家谈谈招生宣传单模板简洁,以及招生传单设计模板对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。 本文目录一览: 1、宣传单模板 2、小学生辅导班招生宣传单怎么写? 3、小学生作文辅导班招生宣传单怎么写 4、英语培训班招生宣传单怎么做 5、开业宣传单怎么写 宣传单模...

三年级上册英语ppt课件免费下载译林版(译林版三年级上册英语PPT)

三年级上册英语ppt课件免费下载译林版(译林版三年级上册英语PPT)

今天给各位分享三年级上册英语ppt课件免费下载译林版的知识,其中也会对译林版三年级上册英语PPT进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!本文目录一览: 1、谁有译林版小学三年级上册英语 第三单元第一课时 My friends 的说课稿 2、哪里有小学三年级上册(三年...

ui设计怎么自我介绍(ui设计师的自我介绍范文)

ui设计怎么自我介绍(ui设计师的自我介绍范文)

今天给各位分享ui设计怎么自我介绍的知识,其中也会对ui设计师的自我介绍范文进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!本文目录一览: 1、面试ui设计师时怎么说我的优缺点 2、简历里面的ui设计师自我评价怎么写 3、UI设计师应该如何写简历? 4、UI设计师求...

镭射票模板绘旅人(时空中的绘旅人镭射票尺寸)

镭射票模板绘旅人(时空中的绘旅人镭射票尺寸)

今天给各位分享镭射票模板绘旅人的知识,其中也会对时空中的绘旅人镭射票尺寸进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!本文目录一览: 1、光夜镭射票尺寸 2、为什么镭射票这么贵 3、镭射票是硬的还是软的 光夜镭射票尺寸 镭射票尺寸是6.8cm×21cm。镭射票属于周...

央视抗击疫情宣传片视频(抗击疫情央视制作的视频)

央视抗击疫情宣传片视频(抗击疫情央视制作的视频)

今天给各位分享央视抗击疫情宣传片视频的知识,其中也会对抗击疫情央视制作的视频进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!本文目录一览: 1、疫情防控宣传内容 2、防疫的宣传稿件 3、2022最新疫情防控宣传内容 4、防疫宣传的新闻稿 疫情防控宣传内容 疫情防控...