C# 控制台应用程序计时器问题
Posted
技术标签:
【中文标题】C# 控制台应用程序计时器问题【英文标题】:C# console application timer issue 【发布时间】:2012-06-03 18:30:33 【问题描述】:我有一个由 Windows 服务调用的控制台应用程序。此控制台应用程序根据某些 App.config 文件条目创建 System.Timers.Timer 实例(我创建了一个自定义 App.config 部分,计时器实例的数量将与该部分中的元素相同)。控制台应用程序预计不会关闭 - 如果它因某种原因关闭,Windows 服务将再次调用它。
为了使控制台应用程序永远存在,我编写了一个无限循环作为控制台应用程序的最后一条语句。而 (1 == 1) 。
问题是,我看到控制台应用程序每 5 分钟终止一次。我不明白为什么会这样。
如果有更好的方法,请提出建议。
代码
static void Main(string[] args)
Boolean _isNotRunning;
using (Mutex _mutex = new Mutex(true, _mutexID, out _isNotRunning))
if (_isNotRunning)
new ProcessScheduler().InitializeTimers();
while (1 == 1)
else
return;
公共类 ProcessScheduler
public void InitializeTimers()
XYZConfigSection.XYZAppSection section = (XYZConfigSection.XYZAppSection)ConfigurationManager.GetSection("XYZApp");
if (section != null)
XYZComponentTimer XYZComponentTimer = null;
for (int intCount = 0; intCount < section.XYZComponents.Count; intCount++)
XYZComponentTimer = new XYZComponentTimer();
XYZComponentTimer.ComponentId = section.XYZComponents[intCount].ComponentId;
XYZComponentTimer.Interval = int.Parse(section.XYZComponents[intCount].Interval);
XYZComponentTimer.Elapsed += new ElapsedEventHandler(XYZComponentTimer_Elapsed);
XYZComponentTimer.Enabled = true;
public class XYZComponentTimer:Timer
public string ComponentId get; set;
更新:
如代码中所述,每个实例的计时器间隔是根据相应元素的配置文件值设置的。现在,配置文件中有两个部分:一个有 15 秒的间隔,另一个是 10 秒。
【问题讨论】:
【参考方案1】:让我猜一下:定时器间隔是 5 分钟,定时器崩溃导致进程退出。
为什么不记录任何崩溃或附加调试器?
【讨论】:
当我在连接了调试器的开发机器上运行应用程序时,我没有看到应用程序崩溃。该应用程序将永远运行,没有任何问题。只有当我把它放在远程计算机上时,我才会看到这个。 将 try-catch 放在任何地方,并将异常记录到文件 (File.AppendAllText)。你已经知道有一个错误。你需要开始做一些事情来找到它。盯着代码是无效的。【参考方案2】:处理AppDomain.UnhandledException event 并记录异常。
【讨论】:
【参考方案3】:由于某种奇怪的原因,Mutex 每 5 分钟被实例化一次,并将 _isNotRunning 设置为 true。这就是问题所在。
【讨论】:
以上是关于C# 控制台应用程序计时器问题的主要内容,如果未能解决你的问题,请参考以下文章