【问题标题】:Does C# timer continue counting after device goes to sleep?设备进入睡眠状态后,C# 计时器是否继续计数?
【发布时间】:2015-01-26 07:33:51
【问题描述】:

我已经使用 c# 创建了一个 windows 服务,需要添加一个计时器,在此期间服务将处于空闲状态,并且只有在空闲超时发生后才应该开始处理。

如果设备进入睡眠状态,计时器会重新启动还是继续?

【问题讨论】:

  • 它是一台 Windows PC,配置为在 10 分钟后进入睡眠状态
  • 你尝试的时候发生了什么?在发布问题之前,您确实先进行了一些研究,对吗?请分享详细信息。
  • 是的,我尝试了stackoverflow.com/questions/14821745/… 中提到的方式,但我没有得到想要的结果。例如:定时器应该在经过的时间到达后触发,例如60秒,PC在醒来后睡了2分钟,它应该触发但它没有。除此之外,假设 PC 睡了 30 秒然后醒来,它应该在接下来的 30 秒后触发,但计时器会在总共 90 秒后触发。

标签: c# windows service timer


【解决方案1】:

做了一点体操并确定了一个我认为可行的解决方案

using System;
using System.Collections.Generic;
using System.Text;
using System.Threading;
using System.Diagnostics;

namespace Test
{
    class Program
    {
        static void Main(string[] args)
        {
            int maxtimeout = 100; // max timeout is 100 seconds, when it reaches this break

            var prevtime = ((DateTime.Now - DateTime.MinValue).TotalMilliseconds) / 1000;

            Console.WriteLine("current time = {0} seconds", prevtime);

            for (; ; )
            {

                Thread.Sleep(5000);
                var newtime = ((DateTime.Now - DateTime.MinValue).TotalMilliseconds) / 1000;
                var timeelapsed = newtime - prevtime;
                Console.WriteLine("Time elapsed = {0}", timeelapsed);
                if (timeelapsed >= maxtimeout)
                {
                    Console.WriteLine("Max timeout reached");
                    break;
                }
                else
                {
                    Console.WriteLine("Max timeout no reached elapased time = {0}", timeelapsed);
                }

            }
        }
    }
}

【讨论】:

    猜你喜欢
    • 2023-04-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多