winform Timer.timer 会创建一个新线程吗?



我想知道System.timer.timer是否会创建一个新的线程并在其上运行。据我观察,当我在程序上运行调试模式时,timer1_Elapsed仍在主线程上运行。谁能帮我?

.NET 中有很多计时器。IIRC在过去十年中跨越了六个,现在接近十几个。如果你包括像StopWatches,Thread/Task.Delay之类的东西,我们已经打破了十几个。即使没有这个,我们也可能打破了十几个 - 很难保持当前的列表。

根据这篇文章,System.Timers.Timer 使用 ThreadPool。线程池实际上只是管理线程的创建和重用以处理各种任务的自动方法。

但是,通常您希望避免多线程。使用GUI,这将首先运行到CrossThreadExceptions和调用的需要。

我发现区分多任务处理和多线程很重要。多任务处理是总称。仅当您的 CPU 负载过重(如计算(时,才需要多线程。然而,在很长一段时间里,多线程只是实现多任务处理的一种最快、最低的代码方式。这种情况最近发生了变化,因为我们现在有了像Async和Await这样的东西,可以用非常低的代码占用量进行无线程多任务处理。

相关内容

最新更新