6

我知道这是一个已经提出的问题,但我找不到任何解决方案。这是我的服务。

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方法中,它可以正常工作,但不能在计时器中。

任何帮助将不胜感激。

4

4 回答 4

6

计时器的命名空间是什么?它必须是System.Timers.TimerSystem.Threading.Timer

请参阅此处:在 Windows 服务中使用的最佳计时器

于 2012-10-20T07:17:24.740 回答
1

好的,几个小时后,我注意到计时器工作正常。计时器没有任何问题。但问题在于FileStream构造函数。FileMode.Append仅适用于FileAccess.Write.

所以修复这行代码解决了这个问题。

无论如何,感谢您的关注。

using (FileStream fs = new FileStream(@"d:\mylog.txt", 
                       FileMode.Append, FileAccess.Write))
于 2012-10-23T09:49:57.583 回答
0

带计时器的 Windows 服务

在这篇文章中阅读我的答案...

也许你想念 timer.AutoReset = true;

于 2012-10-20T10:27:08.807 回答
0

服务必须在有权写入 D:\ 目录的 Windows 帐户下运行。

检查事件查看器中的异常以查看是否存在未经授权的访问异常。

还要在 _timer_Elapsed 方法中放置一个断点,以验证它是否被调用并单步执行代码。

于 2012-10-20T07:34:55.687 回答