2011-08-16 112 views
0

我想在Windows服务中使用mplayer和filewatcher创建快照。我创建了这个服务,并且我能够让命令行mplayer创建快照,但是我遇到了一个问题。我需要创建一个排队队列,这样我就不需要立即运行多个(科学命名法)mplayer进程,并且可以充分利用IO。我试图创建一个SynchronizedCollection来拉,但我有一个问题,我应该启动一个控制进程,检查一个文件是否在队列中,并产生一个新线程来创建快照。在Windows服务中使用Filewatcher控制命令行进程

回答

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(),应该很容易找出答案,您可以使用您设置的标志变量,或者如果您有流程实例,则可以检查流程实例的状态。

相关问题