为什么计时器不能在Windows服务中运行?

Moj*_*isi 5 c# windows-services

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

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();
        }
    }

}
Run Code Online (Sandbox Code Playgroud)

正如你所看到的,我想每隔5秒写入currentTime我的Mylog.txt文件,但即使是2分钟也没有任何反应.如果我把WriteTimeToFile()函数放入OnStart方法它可以正常工作,但不能在计时器中.

任何帮助将不胜感激.

url*_*der 5

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

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


Moj*_*isi 1

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

于是修复这行代码就解决了问题。

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

using (FileStream fs = new FileStream(@"d:\mylog.txt", 
                       FileMode.Append, FileAccess.Write))
Run Code Online (Sandbox Code Playgroud)