gpt4 book ai didi

c# - 每天在特定时间C#(Windows服务)执行方法的代码失败

转载 作者:太空狗 更新时间:2023-10-29 20:58:44 25 4
gpt4 key购买 nike

我有这段代码在每天早上 5 点执行 Windows 服务的方法:

编辑:

MyService ws = new MyService ();

protected override void OnStart(string[] args)
{
if (serviceHost != null)
{
serviceHost.Close();
}

serviceHost = new ServiceHost(typeof(MyService));

serviceHost.Open();
double TimeOfExecution = 5;

DateTime now = DateTime.Now;
DateTime today5am = now.Date.AddHours(TimeOfExecution);
DateTime next5am = now <= today5am ? today5am : today5am.AddDays(1);

System.Threading.TimerCallback callback = new System.Threading.TimerCallback(ws.MethodToExecute());

var timer1 = new System.Threading.Timer(callback, null, next5am - DateTime.Now, TimeSpan.FromHours(24));

}

我希望服务在下一个 5 点执行,之后每 24 小时执行一次。

方法 MethodToExecute() 确实在当天 5 点(或其他指定时间)执行,但第二天执行失败。此外,似乎我是否第一次执行它并不重要,但似乎服务在一段时间后进入休眠状态并且不执行,所以如果 5 点钟不是当天到达,但是第二天,它将无法执行。

有谁知道哪里出了问题?

最佳答案

GC 将收集您的计时器,因为您在OnStart 方法之后没有对它的任何引用。

您只是将其作为局部变量。我希望您知道,一旦 JIT 表示代码中不再使用局部变量,它们就有资格进行垃圾回收。

修复:只需将 timer 存储在实例变量中,您就完成了。

private System.Threading.Timer my5AmTimer = null;

protected override void OnStart(string[] args)
{
//All other code..

this.my5AmTimer = new System.Threading.Timer(callback, null, next5am - DateTime.Now, TimeSpan.FromHours(24));
}

关于c# - 每天在特定时间C#(Windows服务)执行方法的代码失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20282144/

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