为什么是线程.计时器代理正在停滞

本文关键字:停滞 代理 计时器 线程 为什么 | 更新日期: 2023-09-27 17:58:22

我的WPF应用程序启动线程。计时器处于"引导"过程的早期。定时器间隔为100ms,定时器代理中的代码通常需要70ms左右(它在一系列for循环中执行许多操作,其中一些操作涉及从串行端口读取)。启动计时器后,应用程序的其余部分将被初始化(在DI框架中注册的类型、视图的创建、视图模型、各种其他初始化功能)。在这几秒钟内,在计时器委托中执行的代码完全"暂停"。它从不失败,也没有一个串行读取失败(无论这是否纯属运气)——计时器代码似乎只会暂停执行约3秒。

我只能假设所有这些启动的东西(在UI线程上)都得到了更高的优先级,从而阻止了计时器线程获得任何CPU时间。我能做些什么吗?稍后在引导过程中启动计时器可能是一种选择,但我想先探索其他解决方案。

附带说明一下,线程是如何进行的。计时器句柄"重新进入"(如果这是正确的术语),即计时器在上一次调用仍在运行时"滴答作响"?下一次调用是"排队"并在上一次调用最终完成时运行,还是我需要自己处理?

为什么是线程.计时器代理正在停滞

1)计时器在需要时立即启动任务,无需排队。你可以自己检查一下日程安排,比如:

Console.WriteLine("Sleep");
Thread.Sleep(10000);
Console.WriteLine("Awaken");

你会在1秒内看到这样的输出:

Sleep
Sleep
Sleep
Sleep
Sleep
Sleep
Awaken
Awaken
Awaken
Awaken
...

2) 您可以更改线程优先级,但这可能对您没有任何好处。并非所有的.net定时器都适用于实时使用。所以不,你对此无能为力。

相关文章: