gpt4 book ai didi

c# - FileSystemWatcher 网络断开

转载 作者:太空狗 更新时间:2023-10-29 17:51:02 25 4
gpt4 key购买 nike

我有一个 FileSystemWatcher 监控网络共享上的文件。如果发生使共享不可用的事件,可能是由于网络问题,FileSystemWatcher 将断开连接。

显然我可以处理“错误”事件,也许可以做一些日志记录,并且很多文章建议在错误事件处理程序中重新连接 FSW。

但是如果网络共享在错误事件中仍然不可用怎么办。然后我需要引入一个计时器来测试网络共享是否可用并尝试重新连接 FSW。

1)是否有更好的方法?

2) 是否有一个属性可以让我确定 FSW 已与文件断开连接?我注意到 FSW 有一个非公开成员“stopListening”,当 FSW 断开连接时,它似乎设置为 true。但这并没有公开曝光

任何帮助将不胜感激......

谢谢凯文

最佳答案

一些评论和建议...(随着我打字越来越多...抱歉)

FileSystemWatcher.Error 事件在 FileSystemWatcher 收到如此多的事件发生得如此之快以至于它无法处理所有事件时被触发。它不会在监视文件系统时发生错误(例如网络断开)时被触发。

我相信我也遇到过类似的情况。问题是当网络连接断开时,FileSystemWatcher 将永远不会触发事件,因为它实际上看不到它应该监视的内容,但它似乎并没有意识到这一事实。当网络连接恢复时,FileSystemWatcher 不会恢复——即它仍然看不到(恢复的)连接。我们想出的唯一似乎可靠工作的解决方案是有一个计时器,它定期删除整个 FileSystemWatcher 对象并创建一个新对象,设置所有事件和监视文件夹等。因为删除和创建一个新的 FileSystemWatcher 是(相对)快速(即毫秒),您可以将计时器设置为每 10 秒左右激活一次,而不会占用太多处理器。当然,如果网络仍然不可用,则无论您做什么,FileSystemWatcher 都将无法看到网络。不过没关系,它会在 10 秒后重试。

使用此解决方案需要注意两点:

  1. 当计时器激活时,它需要检查 FileSystemWatcher 当前是否未在处理任何事件,如果是则需要等待。因此,在计时器事件中,停止计时器,停止 FileSystemWatcher 引发事件,然后等待任何 FileSystemWatcher 事件完成(使用 lock (...) {...} 是执行此操作的好方法)。
  2. 删除并重新创建 FileSystemWatcher 后,您需要手动检查在刷新 FileSystemWatcher 时(或网络中断时)可能发生的任何事件。例如,如果您正在监视正在创建的文件,并且在刷新 FileSystemWatcher 或网络连接断开时创建了一个文件,那么当您启动 FileSystemWatcher 的新实例时,您将不会获得这些文件的事件(因为文件已经创建)。

希望对您有所帮助。

关于c# - FileSystemWatcher 网络断开,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9161993/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com