C# FileSystemWatcher删除事件处理程序
由于某些原因,我无法从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
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如何与引用一起工作,我会直接引用我的委托以确保它们被删除(而不是一个未被引用的新中介)。