C# 计时器与服务中的线程

标签 c# multithreading timer

我有一项服务每 10 秒访问一次数据库并获取数据(如果有的话)。问题是处理这些数据最多可能需要 30 秒。如果我使用间隔为 10 秒的计时器,该服务将两次获取相同的数据。

我想要达到的效果(只是为了可视化):

while(true)
{
    if(Getnrofrows() > 0)
      do stuff
    else
      sleep for 10 sec
}

人们说 Thread.Sleep 在生产服务中是个坏主意,我该如何使用计时器来做到这一点?

/迈克

最佳答案

您是否尝试将 Timer 属性自动重置为 false,并在刷新数据过程结束时再次启用计时器

using System;

public class PortChat
{
    public static System.Timers.Timer _timer;
    public static void Main()
    {

        _timer = new System.Timers.Timer();
        _timer.AutoReset = false;
        _timer.Interval = 100;
        _timer.Elapsed += new System.Timers.ElapsedEventHandler(_timer_Elapsed);
        _timer.Enabled = true;
        Console.ReadKey();
    }

    static void _timer_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
    {
        //Do database refresh
        _timer.Enabled = true;
    }
}

关于C# 计时器与服务中的线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3474694/

相关文章:

c# - 从包含特定 dd/mm 的数据表中选择行

c# - 如何使用迁移手动创建 asp.net 身份表?

c# - 在 form.show 之后让主线程在按下按钮时执行代码

multithreading - memset 与绑定(bind)到每个物理内核的线程并行

Objective-C iOS,为文本更新设置延迟

c++ - 如何给用户分配一定的时间回答?

java - 平滑组件在修改或循环后自动刷新(ex : timer)

c# - 异步操作和 UI 更新

c++ - 如何可靠地杀死 Qt/C++ 中的线程?

C# protected 属性或字段