【问题标题】:time or timing in C#, and another questionC# 中的时间或计时,以及另一个问题
【发布时间】:2010-12-28 01:39:31
【问题描述】:

问题是: 例如,我如何在没有用户干预的情况下每两秒闪烁一次标签。 就像每 2 秒 label.text=""。在接下来的两秒钟内,我执行了这个 label1.text="visible" 或更改其他属性,例如颜色或其他任何内容。

我放弃了

你能帮我一个基本的代码吗,谢谢。

【问题讨论】:

  • 我不明白你的问题。 tinyurl.com/so-hints
  • 当你提到时间时,你是指从你开始循环以来经过的时间还是实际的系统时间?如果您要查找经过的时间,可以查看 StopWatch 类。

标签: c#


【解决方案1】:

您可以尝试使用timer,间隔为 2 秒。但请记住,每当您在 UI 之外使用线程时,都需要查看 delegatesBeginInvoke

要完成您所追求的目标,您可以每 1 秒运行一次,然后检查 DateTime.Now 以查看时钟是否符合您的条件。

【讨论】:

    【解决方案2】:

    您的问题有点难以理解,但我会尽力而为。

    据我了解,您希望您的代码每两秒执行一次操作。最简单的方法是使用计时器。 System.Timers.Timer 类对此很有用,System.Threading.Timer 也是如此。使用哪个取决于您,但 Threading 命名空间中的那个更原始一些。

    计时器在 ThreadPool 上运行,因此如果您要操作 Windows 窗体,请确保您所做的事情发生在 GUI 线程上,方法是使用 Windows 窗体的 Control.Invoke 或 WPF 的 Dispatcher.Invoke。定时器也有点棘手,因为它们的线程单元通常是 MTA,所以如果你尝试访问剪贴板或类似的东西,你可能会出错。

    如果您想确保您的计时器在特定时间准确触发,而不是在特定时间间隔,您可以制作一个计时器,其周期可以启动另一个计时器,或自行调整。我会争辩说,如果您每 2 或 5 秒执行一次操作,您真的需要它在非常特定的时间发生吗?计时器和 Windows 时间通常不够具体,并且有一些小的不准确之处 - 它会随着时间的推移而漂移几毫秒。

    【讨论】:

      【解决方案3】:

      你可以用一个线程做的事情是这样的:

      • 睡 2 秒
      • 行动
      • 睡 2 秒
      • DoAnotherAction

      在一个循环中。

      有 2 个线程,我会推荐这样的东西:C# Running timed job on StackOverflow

      编辑:使用QuartzNet (tutorial)

      一个链接on StackOverFlow

      【讨论】:

      • 如何确定时间?
      • @user527825 : 使用另一个 Tick Thread,看看我在编辑中设置的文章 :)
      • 既然只使用计时器就这么简单,为什么还要使用线程来执行此操作?这是对线程的完全不当使用。
      • @Jim Mischel :仅仅是因为我不知道 Timer 类,虽然我认为它要简单得多,但如果你不知道它并且你需要正好 2每次调用之间的秒数,您最终将使用 2 个线程、1 个 Tick 线程(主线程)和 1 个或更多工作线程。事实是,即使我使用计时器,我也会在 OnTimed 事件中每 2 秒使用工作线程来完成这项工作。
      【解决方案4】:

      最简单的方法是使用System.Windows.Forms.Timer。您可以将其放在表单上并设置时间间隔,然后创建 Tick 事件处理程序。链接的文档有一个简单的示例,您可以轻松修改它以使用您的标签。

      使用这个定时器的美妙之处在于它会自动与 UI 线程同步,因此您不必担心InvokeBeginInvoke 等。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-08-09
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多