【问题标题】:EnableRaisingEvents (enabling and disabling it)EnableRaisingEvents(启用和禁用它)
【发布时间】:2011-09-02 13:57:53
【问题描述】:

我正在维护一些具有两个 FileSystemWatcher 事件的代码,这使得调试变得困难(并且它有一个错误)。所以我的想法是通过使执行顺序来简化代码。差不多是这样的:

Main method
    1) normal code here
    2) enable event 1, let it check for files, disable it when it is done running once
    3) enable event 2, let it check for files, disable it when it is done running once

那么数据库日志会更有意义。我将能够看到程序的哪个部分做错了。

private void InitializeFileSystemWatcher()
{
    this.MessageMonitor = new FileSystemWatcher(this.MessagePath, this.MessageFilter);
    this.MessageMonitor.IncludeSubdirectories = true; // Recursive.
    this.MessageMonitor.Created += new FileSystemEventHandler(OnMessageReceived);
    this.MessageMonitor.EnableRaisingEvents = true;
}

从主开始,我可以将 EnableRaisingEvents=true 设置为 EnableRaisingEvents=false。这两个事件都索引某个文件夹中的文件并执行回调方法。

我的问题是:如果事件当前正在执行并且我设置 EnableRaisingEvents=false,它会暂停还是继续执行直到完成?

如果它继续,我想只是在事件的开始和结束时设置一个 bool doRUN 变量作为对 main 方法的检查。

【问题讨论】:

  • 继续。小心 bool 标志,FSW 使用线程来引发事件。正确的同步需要锁和/或等待句柄。再说一次,如果这只是为了调试,那么不要太担心。还要考虑线程是您正在追逐的错误的原因。

标签: c# events


【解决方案1】:

您应该在检查以确保它正常工作后分离事件处理程序,然后实例化第二个FileSystemWatcher

在 OnMessageReceived 内部你可以使用类似的东西

public void OnMessageRecieved(Object sender, Events e) //Not the real signature
{
    MessageMonitor.Created -= OnMessageReceived();
    //Do Your things
    OtherMessageMonitor.Created += OnMessageReceived();
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-02-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-17
    • 2011-11-13
    • 1970-01-01
    相关资源
    最近更新 更多