Kev*_*ins 9 .net c# filesystemwatcher
我有一个FileSystemWatcher监视网络共享上的文件.如果发生事件以使共享不可用,可能是由于网络问题,FileSystemWatcher将断开连接.
显然我可以处理"错误"事件,也许做一些日志记录,很多文章建议在错误事件处理程序中重新连接FSW.
但是,如果网络共享在错误事件中仍然不可用,该怎么办?然后我需要引入一个计时器来测试网络共享是否可用并尝试重新连接FSW.
1)有更好的方法吗?
2)是否有一个属性允许我确定FSW已与文件断开连接?我注意到FSW的一个非公共成员"stopListening",当FSW断开连接时,它似乎设置为true.但这并未公开曝光
任何帮助,将不胜感激 ...
谢谢凯文
小智 7
一些评论和建议......(随着我的打字而变得越来越大......抱歉)
FileSystemWatcher.Error事件在FileSystemWatcher发生如此之多的事件以至于无法处理所有事件时触发了FileSystemWatcher.Error事件.在观察文件系统时发生错误(例如网络丢失),它不会被触发.
我相信我遇到了类似的情况.问题是,当网络连接断开时,FileSystemWatcher将永远不会触发事件,因为它实际上看不到它应该看的内容,但似乎并没有意识到这一事实.当网络连接恢复时,FileSystemWatcher无法恢复 - 即它仍然无法看到(恢复的)连接.我们提出的唯一可靠的解决方案是使用定时器定期删除整个FileSystemWatcher对象并创建一个新的,设置所有事件和监视文件夹等.因为删除并创建一个新的FileSystemWatcher是(相对)快速(即毫秒)您可以将计时器设置为每10秒左右激活一次,而不会占用过多的处理器.当然,如果网络仍处于运行状态,无论您做什么,FileSystemWatcher都无法看到网络.但是没关系,它将在另外10秒内再试一次.
使用此解决方案需要注意两件事:
我希望有所帮助.
后续在此。根据 MSDN 论坛上 Microsoft 资源的建议,我将其添加到 Microsoft Connect。
Microsoft 反馈的要点: - 错误事件不仅仅针对内部缓冲区溢出 - 他们将在客户建议列表中添加公开stopListening属性的可能性
链接在这里:http ://connect.microsoft.com/VisualStudio/feedback/details/727934/filesystemwatcher-error-handling
| 归档时间: |
|
| 查看次数: |
6503 次 |
| 最近记录: |