We have built a window service that listens to folders with FileSystemWatcher
, when created we process the file and so on. But after couple of days the event stops working.
- Is it possible that it being collected by the garbage collector (GC)?
- Does the GC collect it holding class (which is a singleton)?
- Should I use a weak event?
- Do I have a bug that means the event gets unregistered?
What i think the problem is, that FSW has an internal buffer, when it overflows its an error, take a look in this article that offer code to solve this problem.
Hope this help anyone.
A couple of things to try, as suggested here:
- In the timer tick event handler, stop your timer before doing your tick event handling, and restart it before exiting the handler
- Wrap your timer code in a try/catch block to see what's happening.
- Read the Elapsed event of the System.Timers.Timer class is not raised in a Windows service bug description/fix and see if that helps you.
In summary:
protected virtual void TimerTick(object sender, EventArgs e)
{
// stop your timer
this.timer.Stop();
try
{
// TODO: add event handler specifics
}
catch
{
// TODO: add some logging to help you see what's going on
}
// restart your timer
this.timer.Start();
}