在文件夹中的文件是通过代码保存的,当创建新文件时,我需要在后台执行一些耗时的工作。在执行作业时,如果我在文件夹中收到新文件或文件,我不应该考虑这一点,我需要在作业完成后执行。文件创建是执行工作的通知,因此不需要为每个文件创建执行工作,但我们应该确保工作完成到最后一个通知。
我正在尝试递归方法来做到这一点,但我仍然失败了。创建新文件时,正在执行 CallReprocess() 方法 ID,我的 Windows 服务会自动停止。
public partial class ReDoService : ServiceBase
{
Boolean eventFired;
Boolean reprocessingInProgress;
String lastCreatedFileName;
public ReDoService()
{
InitializeComponent();
fileSystemWatcher1.Path = folderWatchPath;
eventFired = false;
reprocessingInProgress = false;
lastCreatedFileName = "";
}
private void fileSystemWatcher1_Changed(object sender, FileSystemEventArgs e)
{
lastCreatedFileName = e.FullPath;
if (eventFired)
{
}
else
{
eventFired = true;
CallReprocess(lastCreatedFileName);
}
}
private void CallReprocess(String lastFileName)
{
if (!reprocessingInProgress)
{
if (lastFileName.ToUpper().Contains("EVENTFIRED"))
{
try
{
reprocessingInProgress = true;
eventFired = false;
//// Call the Perform Job method
reprocessingInProgress = false;
}
catch (Exception ex)
{
reprocessingInProgress = true;
eventFired = false;
}
}
else
{
}
CallReprocess(lastCreatedFileName);
}
else
{
}
}
}