C# 为什么计时器在windows服务中不工作?
我知道这是一个已经被问过的问题,但我找不到任何解决办法。这是我的服务C# 为什么计时器在windows服务中不工作?,c#,windows-services,C#,Windows Services,我知道这是一个已经被问过的问题,但我找不到任何解决办法。这是我的服务 class Program : ServiceBase { private Timer _timer; public Program() { ServiceName = "PrintTime"; } static void Main(string[] args) { Run(new Program()); } protecte
class Program : ServiceBase
{
private Timer _timer;
public Program()
{
ServiceName = "PrintTime";
}
static void Main(string[] args)
{
Run(new Program());
}
protected override void OnStart(string[] args)
{
base.OnStart(args);
_timer = new Timer(5000);
_timer.Elapsed += _timer_Elapsed;
_timer.Start();
}
void _timer_Elapsed(object sender, ElapsedEventArgs e)
{
WriteTimeToFile();
}
protected override void OnStop()
{
_timer.Stop();
}
private void WriteTimeToFile()
{
using (FileStream fs = new FileStream(@"d:\mylog.txt", FileMode.Append, FileAccess.ReadWrite))
{
StreamWriter streamWriter = new StreamWriter(fs);
streamWriter.Write(DateTime.Now.ToShortTimeString());
streamWriter.Close();
fs.Close();
}
}
}
如您所见,我想每隔5秒将currentTime
写入我的Mylog.txt
文件,但即使2分钟后也不会发生任何事情。如果我将WriteTimeToFile()
函数放入OnStart
方法中,它可以正常工作,但不在计时器中
非常感谢您的帮助。计时器的名称空间是什么?它需要是
System.Timers.Timer
或System.Threading.Timer
请参见此处:该服务必须在具有写入D:\目录权限的Windows帐户下运行 在事件查看器中检查异常,以查看是否存在未经授权的访问异常 另外,在_timer _appeased方法中放置一个断点,以验证是否调用了它,并逐步执行代码。 阅读我在这篇文章中的答案 也许你错过了
timer.AutoReset=true 好的,几个小时后,我注意到计时器工作正常。计时器没有问题。但问题在于
FileStream
构造函数FileMode.Append
仅通过FileAccess.Write
工作
因此,修复这行代码解决了问题
无论如何,谢谢你的关注
using (FileStream fs = new FileStream(@"d:\mylog.txt",
FileMode.Append, FileAccess.Write))
通过从visual studio附加进程来调试您的服务。
已用
表示计时器。TimerIt是System.Timer.Timer。但我也试过System.Threading.Timer。同样的结果。我用工具箱插入了一个windows窗体计时器。有一次我用工具箱。。。谢谢你的提示!如果对d:\directory的写入被拒绝,那么为什么要将WriteTimeToFile()放入onStart方法中呢?