c# - 为什么计时器在 Windows 服务中不起作用?

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

}

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

如有任何帮助,我们将不胜感激。

最佳答案

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

参见此处:Best Timer for using in a Windows service

关于c# - 为什么计时器在 Windows 服务中不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12986163/

相关文章:

c# - 将扁平字符串映射到列表

c# - 如何在防火墙后设置安全的 WCF 服务?

c# - 您将如何在 Ruby 中简洁地编写此 C# 代码(使用 yield 关键字)?

c# - Https 调用未连接到服务器

c# - WCF服务停止处理调用15秒钟

c# - 复杂形状碰撞检测的替代解决方案?

c# - 无法在C#中进行简单的列表操作

c# - 如何使用自定义卸载程序卸载 Windows 服务

.net - Windows 无法在 Win Server 2008 R2 SP1 上启动服务(错误 1053)

.net - Windows 服务如何以编程方式自行重启?