有些事情告訴我這可能是一個愚蠢的問題,我實際上已經從錯誤的方向接近我的問題,但是在這裏。強制循環包含異步任務,以維護序列
我有一些循環遍歷文件夾中所有文檔的代碼 - 這些文檔在每個文件夾中的字母順序很重要,這一重要性也反映在文檔打印的順序中。這裏是一個簡化的版本:
var wordApp = new Microsoft.Office.Interop.Word.Application();
foreach (var file in Directory.EnumerateFiles(folder))
{
fileCounter++;
// Print file, referencing a previously instantiated word application object
wordApp.Documents.Open(...)
wordApp.PrintOut(...)
wordApp.ActiveDocument.Close(...)
}
看來(我可能是錯的),爲打印輸出代碼是異步的,應用程序有時會進入其中的文件得到打印出來的訂單情況。這被證實是因爲如果我經過一段時間,或者撥打足夠長的電話號碼,所有文件的順序都是正確的。
如何防止下一個打印任務在前一個打印任務完成之前開始?
我最初認爲我可以使用lock(someObject){}
,直到我記得它們僅用於防止多個線程訪問相同的代碼塊。這一切都在同一線程中。
有一些事件,我可以Microsoft.Office.Interop.Word.Application
對象上的鐵絲插入:DocumentOpen
,DocumentBeforeClose
和DocumentBeforePrint
我剛剛想到,這實際上可能是有不能夠準確區分大量文檔的打印隊列中的問題在同一秒內添加。這不可能是問題,可以嗎?
作爲一個附註,此循環位於對象的DoWork事件調用的代碼中。我正在使用它來防止UI阻塞並反饋過程的進度。