【问题标题】:How Can I RaiseEvent Manually For A FileSystemWatcher如何为 FileSystemWatcher 手动引发事件
【发布时间】:2015-07-30 01:35:32
【问题描述】:

我在 FileSystemWatcher 类上进行了扩展,以合并一个 FolderCount 监视器和 FolderEmpty 监视器,如果文件夹达到指定数量的文件或文件夹返回到空状态,它们会引发事件。我似乎可以正常工作,并且在发生这些情况时会引发事件。

但是,我的问题是,当我的 FileSystemWatcher 首次初始化时,它会自动进入检查指定文件夹的文件夹内容以获取文件计数。如果已经达到限制,我需要立即引发事件,而不是等待 FileSystemWatcher 报告它。

目前我似乎只能通过插入 .Created.Deleted 调用来引发事件,但是,由于没有文件被创建或删除,我不知道如何手动引发我的事件。

Public Sub Initialize()
        SetFolderCountStatus() 'Set the isFolderEmpty flag based on file contents
        If Not isFolderEmpty Then
            If options.WatchForFolderCount Then 
                If FileCountReached(options.FileCountToWatch) Then
                    RaiseEvent EventFolderCount(sender, e) 'Sender and e are never defined
                End If
            End If
        End If
    End Sub

我的问题是 sendere 都没有填充任何内容,因为它们位于我的 WatcherEventArgs 之外。

我确信这可以做得更好,但我不确定。任何帮助,将不胜感激。谢谢

【问题讨论】:

  • RaiseEvent EventFolderCount(Nothing, New WatcherEventArgs(...) ) 会起作用,但最好简单地调用一个方法来完成您需要的工作,该方法也由真实事件调用

标签: vb.net events filesystemwatcher raiseevent


【解决方案1】:

您是否真的在您的EventFolderCount 方法中使用了senderEventArgs?您可以为发件人传递Me 和一个空的EventArgs 对象。

但是What are the event arguments “sender” and “e” 建议不要尝试引发事件。相反,您应该有一个完成任务的方法,并在两个地方都调用它。

【讨论】:

  • 谢谢戴夫。我确实使用 EventArgs 来引用文件的.FullPath
  • @Riples,你能用你的.FullPath 正确设置创建 EventArgs 吗?您是坚持引发事件还是将逻辑抽象为可以从两个地方调用的专用方法?
【解决方案2】:

我实际上通过将 EventHandler 更改为只需要 String 变量而不是 EventArgs 来解决这个问题:

Public Event EventFolderCount(filename As String)

这样我就可以在FileSystemWatcher 内外轻松调用它,如下所示:

RaiseEvent EventFolderCount(filename)

感谢@Dave Anderson 为我指明了正确的方向。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-12-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多