I know this is an already asked question, but I couldn't find any solution. Here is my service.
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();
}
}
}
As you can see I want to write currentTime
into my Mylog.txt
file every 5 seconds, but nothing happens after even 2 minutes. If I put the WriteTimeToFile()
function into OnStart
method it works fine, but not in a timer.
Any help would be greatly appreciated.
Yes, they run in a different thread.
Timer is not thread-safe.
It would have already queued before you have called Stop method. It will fire at the elapsed time. To avoid this happening set Timer. AutoReset to false and start the timer back in the elapsed handler if you need one.
What is the timer's namespace? It needs to be System.Timers.Timer
or System.Threading.Timer
.
See here: Best Timer for using in a Windows service
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With