C# 在Windows服务中激活计时器时出现问题
我目前正在尝试创建一个每14天执行一次metod的服务(由于测试,现在是20秒)。目前我的服务中有这些代码行,我似乎无法让它运行AddDataToDb()方法。有人知道我该怎么做才能让计时器工作吗C# 在Windows服务中激活计时器时出现问题,c#,windows-services,C#,Windows Services,我目前正在尝试创建一个每14天执行一次metod的服务(由于测试,现在是20秒)。目前我的服务中有这些代码行,我似乎无法让它运行AddDataToDb()方法。有人知道我该怎么做才能让计时器工作吗 public partial class Service1 : ServiceBase { System.Timers.Timer oTimer = null; double interval = 2000; public Service1()
public partial class Service1 : ServiceBase
{
System.Timers.Timer oTimer = null;
double interval = 2000;
public Service1()
{
InitializeComponent();
IntializeService();
}
void IntializeService()
{
oTimer = new System.Timers.Timer(interval);
oTimer.Enabled = true;
oTimer.AutoReset = true;
oTimer.Start();
oTimer.Elapsed += new ElapsedEventHandler(oTimer_Elapsed);
}
void oTimer_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
{
Data.mData data = new mData();
data.AddDataToDb();
}
protected override void OnStart(string[] args)
{
oTimer.Enabled = true;
oTimer.Start();
}
protected override void OnStop()
{
oTimer.Stop();
}
}
无论如何,使用计时器14天是错误的做法,因为每次应用程序部署或重新启动时,精度都会被破坏。使用任务调度器。如果我想让它在mvc站点上运行?任务计划程序仍然是最好的选择吗?让计划程序请求一个秘密URL来触发处理。对于初学者,您使用了2秒(不是20秒),在InitializeService方法中调用start()后连接处理程序通常不是好的做法。尽管如此,在上述代码中没有区别。您能否进一步详细说明无法运行该方法的含义?就像你尝试过一些调试,断点没有被击中一样?我不确定我说的是什么,但是有两种线程,前台和后台,如果使用了计时器(我认为是后台计时器),它只工作到进程结束,并且不会在主线程之后继续,因此服务可能在启动后停止,因为没有更多的命令告诉他停止。我这样说是因为在Win应用程序中,当你关闭表单时,计时器停止工作。所以我认为这是背景。正如我所说,这只是一个测试,我不确定,但是试着让你的服务暂停几分钟,然后用前/后接地线测试几分钟,看看它是否有效