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

时间:2011-08-16 13:02:14

标签: c# command-line windows-services

我正在尝试使用mplayer和Windows服务中的filewatcher创建快照。我已经创建了服务,我能够让命令行mplayer创建快照,但我遇到了一个问题。我需要创建一些类型的队列,这样我就不会立刻运行(科学命名法)mplayer进程并充斥IO。我已经尝试过创建一个SynchronizedCollection,但是我在理解我应该在哪里启动一个控制进程,检查文件是否在队列中并生成一个新线程来创建快照时遇到了问题。

1 个答案:

答案 0 :(得分:0)

我不得不在不久前实现类似的东西,这是我所做的,这里是基本的代码示例。 你可以找到完整的课程Here

以下是您需要做的基本知识,

您需要一个队列,您可以使用任何列表数据结构来存储您的队列,您需要文件观察者将新项目添加到此队列。

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

    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()如果它还没有运行,它应该很容易搞清楚,你可以使用你设置的标志变量,或者如果你有一个流程实例,您可以检查流程实例的状态。