C#定时器即使系统关闭或重新启动也要运行

时间:2014-09-26 17:11:41

标签: c# timer

我正在尝试创建一个脚本,它会在1天后显示弹出窗口。据我所知,我可以使用Thread.Stop或使用System.Timers或许多其他方式。但每个问题都是计算机必须连续运行这些方法中的每一种,以便在我想要的时候给出所需的结果。基本上我希望脚本从安装我的程序开始,等待24小时,然后显示一个消息框。如果计算机在那时开启,即24小时后,它应该在下次启动时显示消息框,但仅在24小时或更长时间后才会显示。请帮助,我无法找到合适的解决方案。任何帮助将受到高度赞赏。我认为可以通过获取dateTime.Now并将其放入文件中,然后将当前系统时间与文件中的每小时左右的时间进行比较来实现,如果已经过了24小时或更长时间,则显示消息框。请帮忙

3 个答案:

答案 0 :(得分:1)

如果我理解正确,您可以使用的方法是保存"开始日期"。您可以保存计时器的开始日期并从脚本中读取值,这样您就可以计算自从将值分配给开始日期后24小时或更长时间。您可以使用简单的TXT文件来保存值。

答案 1 :(得分:1)

我认为有两种方法可以实现这一目标:

  • 简单方法(但与C#没有严格关联)是使用任务计划程序并创建一个每24小时运行一次C#程序的任务。从安装程序执行此操作的一种方法是使用SchTasks.exe工具。此方法允许您在完成工作后退出程序,而无需明确等待下一次运行。
  • 更难的方法:创建一个Windows服务,这是一个专门设计为在主机上永久运行的程序。虽然这些程序的技术性略高一些。您可以找到有关服务here的更多说明。但是,您可能不想采用此路由,因为服务无法显示弹出窗口等用户界面。

答案 2 :(得分:1)

如果您需要弹出一个消息框,那么您需要一个Windows窗体应用程序。以下是它如何工作的工作流程:

  1. 应用程序需要通过数据库或文件保存数据。
  2. 首次加载应用程序时,它会检查数据库或文件中的TriggerDate条目。
  3. 如果TriggerDate存在,请提取此日期并将其与今天的日期和时间进行比较。如果当前日期和时间超过我们的TriggerDate,请显示消息框。使用当前日期和时间加上24小时重新创建TriggerDate
  4. 如果TriggerDate不存在,请创建它,填充当前日期和时间加上24小时(例如DateTime.Now.AddHours(24))。
  5. 使用Threading.Thread.Sleep()睡5分钟。
  6. 跳至第3步并重复。
  7. 修改

    代码将是这样的:

    private const string TriggerFile = @"C:\TriggerData\trigger.txt";
    private DateTime _triggerDate;
    
    if (!File.Exists(TriggerFile))
    {
        using (StreamWriter sw = File.CreateText(TriggerFile))
        {
            sw.WriteLine(DateTime.Now.AddHours(24));
        }
    }
    using (StreamReader sr = File.OpenText(TriggerFile))
    {
        _triggerDate = DateTime.Parse(sr.ReadToEnd());
    }
    while (true)
    {
        if (DateTime.Now >= _triggerDate)
        {
            MessageBox.Show(@"Alert!");
    
            using (StreamWriter sw = File.CreateText(TriggerFile))
            {
                sw.WriteLine(DateTime.Now.AddHours(24));
                _triggerDate = DateTime.Now.AddHours(24);
            }
        }
        System.Threading.Thread.Sleep(60000*5); // Sleep for 5 minutes
    }
    

    您可能不想while(true)。你想要实现一种退出程序的方法。