Problem is that you are creating new instance of FileSystemWatcher inside loop every time and just after creation as soon as using block ends the instance of Filesystem Watcher get disposed and your thread go to sleep for 5 seconds.
Please create FileSystemWatcher instance outside of while loop and test.
Below is updated code, you can try
public static void StartWatching()
{
Logger Logger = new Logger();
try
{
FileSystemWatcher fsw = new FileSystemWatcher(sourceDir);
if (!Directory.Exists(sourceDir))
Directory.CreateDirectory(sourceDir);
if (!Directory.Exists(processDir))
Directory.CreateDirectory(processDir);
fsw.Created += new FileSystemEventHandler(fsw_Created);
fsw.IncludeSubdirectories = true;
fsw.NotifyFilter = NotifyFilters.LastAccess | NotifyFilters.LastWrite
| NotifyFilters.FileName | NotifyFilters.DirectoryName;
fsw.EnableRaisingEvents = true;
ManualResetEvent mResetEvent = new ManualResetEvent(false);
mResetEvent.WaitOne();
}
catch (Exception ex)
{
Logger.Error("Onstart", "Exception in Onstart method. Error : " + ex.ToString());
}
}