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

C# 在windows服务中使用Filewatcher控制命令行进程,c#,command-line,windows-services,C#,Command Line,Windows Services,我正在尝试在windows服务中使用mplayer和filewatcher创建快照。我已经创建了服务,并且我能够让命令行mplayer创建快照,但是我遇到了一个问题。我需要创建某种类型的队列,这样我就不会同时运行无数的科学命名mplayer进程并淹没IO。我曾尝试创建一个SynchronizedCollection以从中提取,但我在理解应该从何处启动一个控制进程时遇到了一个问题,该进程检查文件是否在队列中,并生成一个新线程来创建快照。不久前我还必须实现类似的功能,下面是我所做的,下面是基本代码示

我正在尝试在windows服务中使用mplayer和filewatcher创建快照。我已经创建了服务,并且我能够让命令行mplayer创建快照,但是我遇到了一个问题。我需要创建某种类型的队列,这样我就不会同时运行无数的科学命名mplayer进程并淹没IO。我曾尝试创建一个SynchronizedCollection以从中提取,但我在理解应该从何处启动一个控制进程时遇到了一个问题,该进程检查文件是否在队列中,并生成一个新线程来创建快照。

不久前我还必须实现类似的功能,下面是我所做的,下面是基本代码示例。 你可以找到全班同学

以下是您需要做的基本操作

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

您需要另一个处理队列的方法,类似这样的方法。这将处理队列中的项目,直到队列为空

    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;
    }
您还需要确保您的文件监视程序将触发ProcessQueue(如果它尚未运行),这应该很容易理解,您可以使用设置的标志变量,或者如果您有流程实例,您可以检查流程实例的状态