0

好的,所以我的问题是我必须捕获删除和重命名事件(我可以这样做)。并修改线程中的数据以处理此问题,以便删除已删除的文件并更改重命名文件的数据。这是系统的伪代码,只是为了了解它的外观。每当我删除时,系统都会抛出一个异常,但它没有被捕获,所以我一直很难弄清楚如何解决或重写解决方案。另一部分是我将同时运行多个经理,但我想如果我不能让一个工作......那么这是徒劳的。

Main
{
    public void Run()
    {
        List<FileInfo> someData = new List<FileInfo>();
        FileWatcher fileWatcher = new FileWatcher(@"C:\USers\user1\Documents");

        fileWatcher.NotifyFilter = NotifyFilter.Last
        fileWatcher.Deleted += new FileSystemEventHandler(OnDelete);
        fileWatcher.EnableRaisingEvents = true;

        Manager aManager = new Manager(someData);
        Thread aThread = new Thread(new ThreadStart(aManager.ExecuteTask));
        aThread.Start();
    }

    static void OnDelete(object sender, Event e)
    {
        aManager.Pause();
        aManager.RemoveData(e.FileInfo);
        aManager.Resume();
    }
}


Manager
{
    ExecuteTask()
    {
        while(someData.Count > 0)
        {
            while (paused) ; // <- This is something I am trying to add
            PreformSubTask(someData[0]);
        }
    }

    PreformSubTask()
    {
        lock (_locker)
        {
            Worker someWorker = new Worker(someData[0]);
            Thread someThread = new Thread(new ThreadStart(worker.ExecuteTask()));
        }

        worker.Join(someSetOfTime);

        lock(_locker)
        {
            someData.RemoveAt(0);
        }
    }

    Pause()
    {
        lock (_locker)
        {
            if (!paused) paused = true;
        }
    }

    Resume
    {
        lock (_locker)
        {
            if (paused) paused = false;
        }
    }

    RemoveData(FileInfo toRemove)
    {
        someData.RemoveAll(sd => sd.Equals(someData));
    }
}
4

1 回答 1

0

您应该使用线程同步来保护多个线程之间共享的数据不被损坏。查看lock关键字或Mutex类。

但是,我真的建议不要重写任务队列/调度并使用现成的东西。

简单地在 OnDelete 处理程序中进行处理有什么问题?

于 2012-07-27T16:15:33.193 回答