2016-08-22 86 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()法)......你就必須安全地做到這一點,在你的解決方案的背景下。

如果有多線程訪問隊列,請將其鎖定。

如果在迭代期間有可能更改隊列大小,請迭代隊列副本。

如果有進程可能更改兩個應用程序所需的文件的可能性,請將其互斥爲用於控制訪問。