.NET计时器是否异步运行?
我有一个使用Jabber-net ( XMPP库 )的应用程序的消息传递方面。
我想做什么,如果由于某种原因与服务器的连接结束,就是每隔一分钟左右继续尝试连接。
如果我在下一次尝试之前启动一个Timer等待一段时间,那个定时器是否异步运行并且生成的Tick事件加入主线程,或者我是否需要启动自己的线程并从那里启动定时器?
你用的是什么样的计时器?
在所有情况下,计时器本身都是异步的 – 在它发生之前它不会“占用”一个线程。
计时器将在后台有效运行并导致主线程中的事件被执行。
我不确定.NET中的Timers是如何实现的,但是如果他们使用windows API来创建一个定时器,那么表单消息循环会收到一条WM_TIMER
消息,并且只有当表单线程不忙时它才会处理该请求,所以计时器会在正确的时间触发,但你可能会停止UI线程。 计时器将使用SetTimer
API启动,操作系统将确保发布WM_TIMER
消息。
我已经检查过,只有System.Windows.Forms.Timer+TimerNativeWindow.StartTimer(Int32)
取决于:
[DllImport("user32.dll", CharSet=CharSet.Auto, ExactSpelling=true)] public static extern IntPtr SetTimer(HandleRef hWnd, int nIDEvent, int uElapse, IntPtr lpTimerFunc);
所以只有这个计时器有所描述的“问题”。
上述就是C#学习教程:.NET计时器是否异步运行?分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/cdevelopment/1002313.html