使用FileSystemWatcher通知Windows服务执行一些耗时的任务

时间:2013-09-13 14:48:22

标签: c# .net multithreading filesystemwatcher

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

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

}

0 个答案:

没有答案