gpt4 book ai didi

c# - Windows 服务上的多个计时器未正确触发

转载 作者:太空宇宙 更新时间:2023-11-03 11:24:24 24 4
gpt4 key购买 nike

我在我的公司继承了一项 Windows 服务以进行增强。目前,该服务每天在指定的开始时间打印数据库中特定记录的报告。我正在添加一个条件来设置第二个开始时间,以运行省略特定记录的相同报告。我遇到的问题是我设置了两个单独的开始时间(通常相隔约 15 分钟),它似乎跳过了第一个开始时间,如果报告文件已经存在则只运行第二个。

    public partial class Service1 : ServiceBase
{
Timer t1;
Timer t2;
bool Condition;

public Service1()
{
InitializeComponent();
}
protected override void OnStart(string[] args)
{
t1 = new Timer();
t1.Interval = (1000 * 60 * 3); // 3 minutes...
t1.Elapsed += new ElapsedEventHandler(t1_Elapsed);
t1.AutoReset = true;
t1.Enabled = true;

if (Condition) //Condition is an option in the configuration to determine if this timer should even start
{
t2 = new Timer();
t2.Interval = (1000 * 60 * 3); // 3 minutes...
t2.Elapsed += new ElapsedEventHandler(t2_Elapsed);
t2.AutoReset = true;
t2.Enabled = true;
}
}
private void t1_Elapsed(object sender, ElapsedEventArgs e)
{
if (File.Exists("FileName1"))
{
string CurrentTime = DateTime.Now.ToShortDateString();

if (CurrentTime == ConfigurationManager.AppSettings["StartTime"].ToString())
{
//Print Report
}
}
else
{
//Print Report
}
}
private void t2_Elapsed(object sender, ElapsedEventArgs e)
{
if (File.Exists("FileName2"))
{
string CurrentTime2 = DateTime.Now.ToShortDateString();

if (CurrentTime2 == ConfigurationManager.AppSettings["StartTime2"].ToString())
{
//Print Report 2
}
}
else
{
//Print Report 2
}
}
protected override void OnStop()
{
t1.Enabled = false;
t2.Enabled = false;
}
}

我不明白为什么第一个被跳过。两者都会检查文件是否存在,如果不存在则打印出来。下次运行时,第二份报告将在预定时间打印,但第一份报告将被跳过。我似乎无法弄清楚我错过了什么。

最佳答案

您是否有可能使用了错误的计时器?我记得在 .Net 中大约有 2 或 3 种类型的计时器:

System.Timers.Timer

System.Thread.Timer

System.Windows.Forms.Timer

我相信在 Windows 服务中,您应该使用前两个中的一个,更可能是 System.Timers.Timer,因为它通过 SynchronizationObject 属性提供线程安全性: System.Timers.Timer vs System.Threading.Timer

关于c# - Windows 服务上的多个计时器未正确触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9949952/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com