我的WPF应用程序在其“引导”过程中很早就启动了Threading.Timer。定时器间隔为100ms,定时器代表中的代码通常需要大约70ms(它在一系列for
循环中执行一些操作,其中一些涉及从串行端口读取)。启动计时器后,应用程序的其余部分被初始化(在DI框架中注册的类型,视图的创建,视图模型,各种其他初始化函数)。在这几秒钟内,在定时器代理中执行的代码完全“失速”。它永远不会失败,并且它的连续读取都不会失败(不管这纯粹是运气) - 计时器代码似乎暂停执行大约3秒钟。为什么Threading.Timer委托失速?
我只能假设所有启动的东西(在UI线程上)获得更高的优先级,从而阻止计时器线程获取任何CPU时间。有什么我可以做的吗?在启动过程中稍后启动计时器可能是一种选择,但我想首先探索其他解决方案。请注意,Threading.Timer如何处理“重入”(如果这是正确的术语),即在前一次调用仍在运行时计时器“打勾”?当前一个调用最终完成时,下一个调用是否“排队”并运行?还是我需要自己处理?