我知道这是一个已被问到的问题,但我找不到任何解决方案。这是我的服务。
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
方法,它可以正常工作,但不能在计时器中使用。
非常感谢任何帮助。
答案 0 :(得分:5)
计时器的名称空间是什么?它必须是System.Timers.Timer
或System.Threading.Timer
。
答案 1 :(得分:1)
好的,几个小时后,我注意到计时器工作正常。计时器没有任何问题。但问题是关于FileStream
构造函数。 FileMode.Append
仅适用于FileAccess.Write
。
因此修复这行代码解决了这个问题。
无论如何,感谢您的关注。
using (FileStream fs = new FileStream(@"d:\mylog.txt",
FileMode.Append, FileAccess.Write))
答案 2 :(得分:0)
服务必须在具有写入D:\目录的权限的Windows帐户下运行。
检查事件查看器中的异常,以查看是否存在未经授权的访问异常。
还在_timer_Elapsed方法中设置了一个断点,以验证它是否被调用并逐步执行代码。
答案 3 :(得分:0)