【发布时间】:2016-07-22 10:52:44
【问题描述】:
我的 WPF 应用程序在其“引导”过程的早期启动了 Threading.Timer。定时器间隔为 100 毫秒,定时器委托中的代码通常需要大约 70 毫秒(它在一系列for 循环中执行许多操作,其中一些涉及从串行端口读取)。启动计时器后,初始化应用程序的其余部分(向 DI 框架注册的类型、视图的创建、视图模型、各种其他初始化功能)。在这几秒钟内,计时器委托中执行的代码完全“停止”。它永远不会失败,并且它的串行读取都不会失败(这是否纯粹是运气) - 计时器代码似乎只是暂停执行大约 3 秒。
我只能假设所有这些启动内容(在 UI 线程上)都获得了更高的优先级,从而阻止了计时器线程获得任何 CPU 时间。我能做些什么吗?稍后在引导过程中启动计时器可能是一种选择,但我想先探索其他解决方案。
在旁注中,Threading.Timer 如何处理“重新进入”(如果这是正确的术语),即在前一次调用仍在运行时计时器“滴答”?下一个调用是否会“排队”并在上一个调用最终完成时运行,还是我需要自己处理?
【问题讨论】:
标签: c# multithreading timer