[英]Controlling commandline process with Filewatcher in a windows service
我正在尝试在 windows 服务中使用 mplayer 和 filewatcher 创建快照。 我已经创建了该服务,并且能够让命令行 mplayer 创建快照,但我遇到了问题。 我需要创建某种队列,这样我就不会同时运行无数(科学命名)mplayer 进程并淹没 IO。 我已经尝试创建一个 SynchronizedCollection 以从中提取,但我无法理解我应该在哪里启动一个控制进程来检查文件是否在队列中并产生一个新线程来创建快照。
前段时间我不得不实现类似的东西,这就是我所做的,这是基本的代码示例。 你可以在这里找到完整的 class。
以下是您需要执行的基本操作,
你需要一个队列,你可以使用任何列表数据结构来存储你的队列,你需要你的文件观察器来向这个队列添加新项目。
你需要另一种处理队列的方法,就像这样。 (这将处理队列中的项目,直到队列为空)
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()
如果它尚未运行,它应该很容易弄清楚,您可以使用您设置的标志变量,或者如果您有一个流程实例可以检查您的流程实例的状态。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.