0

在文件夹中的文件是通过代码保存的,当创建新文件时,我需要在后台执行一些耗时的工作。在执行作业时,如果我在文件夹中收到新文件或文件,我不应该考虑这一点,我需要在作业完成后执行。文件创建是执行工作的通知,因此不需要为每个文件创建执行工作,但我们应该确保工作完成到最后一个通知。

我正在尝试递归方法来做到这一点,但我仍然失败了。创建新文件时,正在执行 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
        {              
        }          
    }

}

4

0 回答 0