【问题标题】:How to run a timer in an separate thread?如何在单独的线程中运行计时器?
【发布时间】:2009-12-15 12:56:11
【问题描述】:

我有一个像下面这样的循环

for(int i = 0; i < 10; i++)
{
    // some long time processing
}

我想创建一个计时器,它会检查一个处理是否运行超过 5 分钟。如果一个处理运行超过 5 分钟,它将停止当前处理,然后开始另一个处理。

是否可以让另一个线程监控主循环?

我的程序是一个控制台应用程序。

【问题讨论】:

    标签: c# multithreading timer


    【解决方案1】:

    看看ManualResetEvent,特别是WaitOne方法。

    【讨论】:

      【解决方案2】:

      除了 Jamie 的 asnwer 之外,您还可以使用 System.Threading.Timer,它将在后台线程中执行。

      【讨论】:

        【解决方案3】:

        你应该使用System.Timers.Timer

        【讨论】:

        • 其实是System.Timers.Timer
        • System.Timers.Timer 是 System.Threading.Timer 的 IComponent(设计器拖放)版本 - mark.michaelis.net/Blog/…
        • @Richard,不,那是 form.timers
        • @Fredou,没有 Form.Timers 在 UI 线程上运行。 System.Timers.Timer 扩展了 Component,因此可用于拖放。
        • 不同定时器类型的解释:msdn.microsoft.com/en-us/magazine/cc164015.aspx
        【解决方案4】:

        但是,您仍然无法真正中止正在运行的代码。 代码本身必须提供一种取消自身的能力,计时器可以在一定时间后调用。

        例如,您可以使用布尔值“shouldCancel”来检查循环的每次迭代(甚至多次)。

        “糟糕”的方式是使用 Thread.Abort - 然而,这不是很好的风格。

        【讨论】:

          猜你喜欢
          • 2010-11-28
          • 1970-01-01
          • 2014-05-27
          • 2018-07-28
          • 1970-01-01
          • 2021-06-09
          • 1970-01-01
          • 2013-09-26
          • 2019-08-12
          相关资源
          最近更新 更多