在windows服务中使用Filewatcher控制命令行进程

本文关键字:Filewatcher 控制 命令行 进程 windows 服务 | 更新日期: 2023-09-27 18:05:39

我试图在windows服务中使用mplayer和文件监视器创建快照。我已经创建了服务,我能够让命令行播放器创建快照,但我遇到了一个问题。我需要创建某种类型的队列,这样我就不会有无数的(科学术语)mplayer进程同时运行并淹没IO。我试过创建一个SynchronizedCollection来拉,但是我有一个问题,理解我应该在哪里开始一个控制进程,检查一个文件是否在队列中,并产生一个新线程来创建快照。

在windows服务中使用Filewatcher控制命令行进程

我不得不实现类似的东西一段时间前,这是我所做的,这是基本的代码样本。你可以在这里找到完整的课程。

这是你需要做的基本事情,

你需要一个队列,你可以使用任何列表数据结构来存储你的队列,你需要你的文件监视器来添加新的项目到这个队列。

需要另一个方法来处理队列,就像这样。(这将处理队列中的项,直到队列为空)

    private void ProcessQueue()
    {
        do
        {
                try
                {
                    Itme job = null;
                    lock (Queue)
                    {
                        if (Queue.Count != 0)
                        {
                            job = Queue.First();
                            Queue.Remove(job);
                        }
                    }
                    if (job != null)
                    {
                        Execute(job);
                    }
                }
                catch (Exception e)
                {
                    Logger.FatalException("An error has occurred while processing queued job.", e);
                }

        } while (Queue.Count != 0);
        Logger.Trace("Finished processing jobs in the queue.");
        return;
    }

你还需要确保你的文件监视器将触发ProcessQeueue(),如果它还没有运行,它应该很容易弄清楚,你可以使用你设置的标志变量,或者如果你有一个过程实例,你可以检查你的过程实例的状态。