【发布时间】:2010-08-16 18:47:34
【问题描述】:
我想要一个新线程中的计时器滴答/经过事件。好像我不能使用 Windows 计时器。但是,如果我使用 Timers.Timer,它会从线程池中为每个经过的事件创建工作线程。有没有办法让这些事件在同一个线程中发生?
更新:
感谢大家回答这个问题。
不过,我背后的意图可能听起来有点疯狂。我要你纠正我。当我试图实现这一点时,这是我的想法(作为新手)。我正在尝试每 2 秒执行一次任务。当我使用 Timers.Timer 时,它每 2 秒创建一个线程,我认为这是一种开销。
我的主线程和其他线程需要大量处理器时间来执行它们的任务。因此,如果我可以避免创建这些线程,那么每次计时器经过时,我都会为我的主线程和其他线程节省处理器的微秒时间来创建一个线程。
我进行了快速测试并比较了几个解决方案。每种情况下间隔 1000 毫秒。 100 滴答声。
解决方案 1:带有等待/睡眠的无限循环 {00:01:42.0068344}
解决方案 2:使用 Brian 的同步器 {00:01:42.4068573}
解决方案 3:Timers.Timer 原样 {00:01:42.4018571}
这应该告诉我 2.0068344、2.4068573、2.4018571 是在后台其他事情上浪费的时间,而不是 1000 毫秒的时间间隔为 100 个滴答声。这应该意味着当解决方案1满足您的需求时,它是性能方面的最佳解决方案?
这也应该意味着,虽然 Brian 的解决方案是同步到一个线程,但它实际上是在后台创建线程。
请确认或纠正我。
【问题讨论】:
-
我很困惑。首先,您询问有关在新线程中运行代码的问题。然后你说你想在同一个线程上执行。是哪一个!?
-
对不起.. 我不够清楚.. Timers.Timer 似乎为每个事件创建一个新线程.. 我正在寻找的是在新线程中运行代码.. 但是所有这些事件都应该发生在同一个新线程中,而不是为每个事件创建一个线程..
-
也许你可以重新表述你的问题来解释你想要达到的目标。例如“我怎样才能定期做一些处理,但只允许一个线程在任何给定时刻处理这些数据?”
-
您使用的是 WinForms 还是 WPF 并希望计时器使用 UI 线程?
-
@user:没有“C#.net”之类的东西,只有“C#”和“.NET”
标签: c# .net multithreading timer