2014-08-27 124 views
0

我有一個程序,做到這一點:如何知道FileSystem.CopyDirectory何時完成?

FileSystem.CopyDirectory(from, to, UIOption.AllDialogs); 
DisplayMessage(); 

運行時,該目錄將被複制和顯示窗的內置與進度信息的文件複製對話框。但是,我的DisplayMessage()在該對話框關閉之前運行。它在複製開始後不會立即運行,而是當進度條完全完成時,對話框尚未關閉。似乎在進度條填滿和對話結束之間有一點點延遲(至少在我的電腦上)。我假設這也可能發生在其他電腦上。

由於FileSystem.CopyDirectory不返回任何內容,我怎麼知道它何時完全完成?

+1

實際的文件複製是同步完成的。顯示的對話框是異步的。因此,在所有文件完成處理之前,您的代碼不會進入下一行。該窗口僅用於演出。 – gunr2171 2014-08-27 19:19:17

+0

是不是FileSystem除了VB? http://msdn.microsoft.com/en-us/library/ms127957(v=vs.110).aspx – 2014-08-27 19:22:55

+1

@ Cubicle.Jockey,是的,但通過在項目中包含「Microsoft.VisualBasic」,你可以稱它爲來自C#代碼。我發現它僅用於複製c#缺失的完整目錄。 – gunr2171 2014-08-27 19:28:11

回答

0

FileSystem.CopyDirectory好像封裝了shell32.interop.Folder.CopyHere(...)方法。所以你不能得到關於操作的任何信息,因爲操作發生在Windows內部。

所以我建議以@ Cubicle.Jockey的答案作爲解決方案。

+0

哇奇怪!當我輸入我的答案時,我想建議的答案消失了!所以建議您編寫自己的複製方法。檢查此:[鏈接](http://msdn.microsoft.com/en-us/library/bb762914(v = vs.110).aspx) – 2014-08-27 20:15:49

+0

沒關係,我看到他的答案之前。我知道這和msdn上的其他推薦方法(它只是以一種稍微不同的方式遍歷目錄)複製目錄,但在這兩種情況下,它都需要我實現我自己的進度指示,我正在嘗試避免。所以我可以選擇與FileSystem.CopyDirectory的這個小警告生活或滾動我自己的實施。感謝大家的幫助! – 2014-08-27 20:24:43