【问题标题】:How To Know When A FileSystemWatcher Is Finished如何知道 FileSystemWatcher 何时完成
【发布时间】:2014-01-09 21:45:18
【问题描述】:

下面是我如何使用 FileSystemWatcher 将 PDF 从一个位置移动到另一个位置。

Public Sub WATCHER()

    'CREATE NEW FILESYSTEMWATCHER
    Dim Watcher As New FileSystemWatcher()
    Watcher.Path = "<<path>>"
    Watcher.NotifyFilter = NotifyFilters.LastWrite
    Watcher.Filter = "*.pdf"

    AddHandler Watcher.Changed, AddressOf OnChanged
    AddHandler Watcher.Created, AddressOf OnChanged

    Watcher.EnableRaisingEvents = True

End Sub

Private Sub OnChanged(source As Object, e As FileSystemEventArgs)

    'MOVE PDFs TO NEW LOCATION
    For Each foundFile As String In My.Computer.FileSystem.GetFiles("<<path>>", FileIO.SearchOption.SearchAllSubDirectories, "*.pdf")
        Dim foundFileInfo As New System.IO.FileInfo(foundFile)
        'ToolStripStatusLabel1.Text = "Moving PDFs..."
        File.Move(foundFile, "<<path>>" & foundFileInfo.Name) 'MOVES PDFs
    Next

End Sub

我只想在所有 PDF 都被移动后继续做一些事情,比如一个说明所有文件都被移动的 msgbox。移动完成时是否会引发一些事件?

【问题讨论】:

  • 在应用程序结束之前,文件观察程序永远不会真正完成或工作完成是吗?这不是观察者的重点吗?
  • 我的想法是你可以在任何时候启动一个观察者对吗?我还认为您可以随时停止它而无需关闭应用程序。如果我知道关于文件观察者的一切,我就不会问任何问题,因为我显然不知道关于它的一切,所以我被否决了,很好吧?
  • 是的,您可以启动和停止它们,但只要它们在运行,它们就永远不会完成。您可能想要某种进度报告,例如指示最后一步的标签,但您将不得不应对跨线程调用。

标签: vb.net visual-studio-2010 filesystemwatcher


【解决方案1】:

我相信 File.Move 是一种同步方法。在 for 循环之后,您可以向用户发送所有内容已被移动的消息。 File.Move 不会花费很长时间来执行,因为它不会在磁盘上移动任何东西,它只会更新文件路径。如果您将 File.Move 与 File.Copy 交换出去,您应该会看到更长的延迟,然后它才会向用户发送一切已完成的消息。

【讨论】:

  • 这也是我的想法。我对此进行了测试,它只移动了 2 个文件,扔了 msgbox,停止移动所有文件。我用大约 1,500 个 PDF 文件对此进行了测试。
  • 您是要移动所有位于同一目录中的文件,还是您有一些位于子目录中的文件?
  • 好吧,最初我在后台程序的完成事件中移动了文件,移动发生时锁定了应用程序。有人建议我使用文件系统观察器,它运行良好。此外,这些 pdf 文件是从另一个进程生成的,因此它们不是同时生成的。
  • hmm,也许来自负责移动文件的进程,您可以调用 Function MoveMyFiles(FromPath,ToPath) As Integer,这将移动该文件夹中的所有内容并返回移动的文件数.继续调用 MoveMyFiles 直到它返回 0。然后您可以等待 x 时间并再次调用 MoveMyFiles。如果它再次返回 0,则假设其他进程已完成。
  • 除此之外,您似乎需要从其他进程中引发一些标志,让您知道它已完成创建 pdf 文件,此时您只需调用 MoveMyFiles 一次。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-02-01
  • 2011-04-05
  • 2021-04-25
  • 2020-02-13
  • 1970-01-01
  • 1970-01-01
  • 2023-04-06
相关资源
最近更新 更多