C# FileSystemWatcher删除事件处理程序

C# FileSystemWatcher删除事件处理程序,c#,events,handler,filesystemwatcher,C#,Events,Handler,Filesystemwatcher,由于某些原因,我无法从FileSystemWatcher中删除事件处理程序 这就是我所拥有的 void Start() { ivFileSystemWatcher = new FileSystemWatcher(); ivFileSystemWatcher.Changed += new FileSystemEventHandler(ivFileSystemWatcher_Changed); } void Stop() { ivFileSystem

由于某些原因,我无法从FileSystemWatcher中删除事件处理程序

这就是我所拥有的

void Start()
{
     ivFileSystemWatcher = new FileSystemWatcher();
     ivFileSystemWatcher.Changed += 
        new FileSystemEventHandler(ivFileSystemWatcher_Changed);
}

void Stop()
{
     ivFileSystemWatcher.Changed -= 
        new FileSystemEventHandler(ivFileSystemWatcher_Changed);
     ivFileSystemWatcher.Dispose();
}

当我调用start时,我开始接收更改事件,但当我调用stop时,我希望事件停止,但它们仍在引发。

您是否尝试将
EnableRaisingEvents
设置为
false

void Stop() 
{ 
     ivFileSystemWatcher.EnableRaisingEvents = false;

     ivFileSystemWatcher.Changed -=  
        new FileSystemEventHandler(ivFileSystemWatcher_Changed); 
     ivFileSystemWatcher.Dispose(); 
}

在没有看到其余代码的情况下,我不相信这是我在“EnableRaisingEvents=false”中添加的
Dispose()

事件的最佳位置。事件仍在引发中。有很多方法可以通过使用标志来忽略事件,但是我最担心的是,如果事件没有被清理,随着时间的推移,这可能会很糟糕。别管我是个白痴——我从来没有叫过“停止”。现在一切正常。似乎您也不应该取消“新”事件处理程序的订阅,而应该直接引用您的代理。这里没有明确说明,但是他们使用的符号以及GC如何与引用一起工作,我会直接引用我的委托以确保它们被删除(而不是一个未被引用的新中介)。