【发布时间】:2018-11-16 08:33:32
【问题描述】:
我在 C# 中创建了 Windows 服务并创建了系统计时器并在 OnStart() 方法中启动它。当我在 PC 中上传服务时出现问题。我确实对其进行了调试,所以问题是当 OnStart 方法启动计时器时,计时器中任何方法(DBinsert 方法)中的所有代码都将无限继续(第 1 行,第 2 行,....第 15 行然后转到第 1 行..再次)怎么能我解决?
Timer tmr = new Timer();
protected override void OnStart(string[] args)
{
tmr.Interval = 5000;
tmr.Elapsed += tmr_Elapsed;
tmr.Start();
}
private void tmr_Elapsed(object sender, ElapsedEventArgs e)
{
DBconnection.DBinsert();
}
【问题讨论】:
-
这是因为你的时间间隔等于
5秒,我猜你的调试速度没有比这快。 -
Rascar - 对于您发布的少量代码,很难提供帮助。例如,DBconnection 在哪里初始化? DBInsert 是做什么的?在调试器之外运行服务时遇到什么问题?
-
@DavidKemp 所有无关紧要的东西,OP 想知道,为什么他在
DBinsert()方法中的代码在他调试时一遍又一遍地执行。他的Interval设置为5000毫秒(等于5秒),所以如果他开始调试并通过少于5秒的代码,他将一遍又一遍地重新开始,因为计时器已经过去. -
关于@SeM所说的,也许你可以在
Elapsed事件处理程序中添加一些条件编译,当它进入方法时将StopTimer和Start它当它离开时再次。这样,您可以在调试时在该方法中使用任意时间,并且不会影响您的 Release 构建。 -
伙计们,不仅调试时间,当我没有调试就启动服务时它不会给出结果... DBinsert 是静态的,我不创建 DBconnection 类的实例。在 DBinsert 中,如果存在新电子邮件,我只检查 Outlook 邮件将其插入数据库,但从某些代码行中,它将 1 行作为无穷大