2016-08-22 122 views
0

我还没有使用Queue集合。但基于我能够收集的信息,似乎这是对我的问题的正确方法。C#在队列中添加新项目到队列中

我有控制台应用程序扫描文件夹的某些类型的新文件。基于特定的标准。只有新项目被添加到queue.xml文件。这是在某个时间间隔(每1小时)完成的。

另一个控制台应用程序在不同的时间点(每4小时)触发一次。它读取queue.xml文件并传递每个项目进行处理。看来最好的办法是解析xml文件并创建Queue集合。这样每个项目将按顺序处理。

这是问题。处理文件可能需要几个小时,在此期间queue.xml可能会有一些新项目,因此Queue Collection不会反映这些更改。

是否有可能再次解析xml文件并将新项目添加到当前正在进行的队列?

在运行时更改集合大小会导致问题。这种排队方式不同吗?

+2

你的XML文件的模式是什么?它只是文件名?为什么它是一个XML文件? – itsme86

+0

XML包含文件名,显示名称,剧集标题,编码配置文件名称,状态。其中一些信息需要传递给ffmpeg和手刹进行处理(文件名),其余部分用于后期处理。由于在给定的时间点只有两个项目,并且在完成后它们将被删除,所以我不想使用数据库。其次,收集后续处理项目的过程应与实际编码分开。根据我的经验,这种方法似乎更好。有时您可能在编码过程中遇到错误。 – tipitoe

回答

1

是否有可能再次解析xml文件并将新项目添加到当前正在进行的队列?

当然,你只需要定义它是安全的规则发生。

在两个应用程序中使用mutex可在读取/写入期间锁定文件,并在处理应用程序中订阅FileSystemWatcher事件以检测文件何时发生更改。

在运行时更改集合大小会导致问题。这种排队方式不同吗?

它可以安全的在运行时更改任何集合的大小,这通常是为什么你使用集合(例如,它们已是有原因的Add()法)......你就必须安全地做到这一点,在你的解决方案的背景下。

如果有多线程访问队列,请将其锁定。

如果在迭代期间有可能更改队列大小,请迭代队列副本。

如果有进程可能更改两个应用程序所需的文件的可能性,请将其互斥为用于控制访问。