gpt4 book ai didi

c# - 如何从另一种方法结束 filewatcher?

转载 作者:太空宇宙 更新时间:2023-11-03 18:17:38 25 4
gpt4 key购买 nike

下面是我编写的文件观察器类的代码:

class FileWatcher  
{
#region Method that begins watching
public static void watch()
{

FileSystemWatcher watcher = new FileSystemWatcher();

watcher.Path = ConfigurationManager.AppSettings["OpticusFileLoc"];
watcher.Filter = ConfigurationManager.AppSettings["OpticusFileName"];

watcher.NotifyFilter = NotifyFilters.LastAccess | NotifyFilters.LastWrite | NotifyFilters.FileName | NotifyFilters.DirectoryName;

watcher.Changed += new FileSystemEventHandler(OnChanged);
Console.Write("\nWatcher started. Press any key to end.\n");

watcher.EnableRaisingEvents = true;
}
#endregion

#region Trigger function on change
public static void OnChanged(object source, FileSystemEventArgs e)
{
Console.WriteLine("File has been changed.\n");
//watcher.EnableRaisingEvents = false ;

//Program.Main();
}
#endregion

}

如何从 OnChanged 方法中将 watcher.EnableRaisingEvents 标志设置为 false?

我想我可以通过将 FileSystemWatcher 对象的声明移到它所在的方法之外来做到这一点,但我想知道是否有其他方法可以做到这一点。

最佳答案

I guess I could do it by moving the declaration of the FileSystemWatcher object outside the method it is in, but I'm wondering if there's another way to do it.

这正是您应该做的(让 watcher 只是您的 FileWatcher 类的成员字段)。

也就是说,您也可以这样做:

public static void OnChanged(object source, FileSystemEventArgs e)
{
Console.WriteLine("File has been changed.");

var watcher = source as FileSystemWatcher;
if (watcher != null)
{
watcher.EnableRaisingEvents = false;
}
else
{
// Hmm... some other object called this method.
// Do you really want that to be allowed?
}
}

请注意我在上面的代码中添加的注释。通常,调用 public 这样的方法是一个糟糕的调用,因为这使得任意代码都可以调用 OnChanged,即使这样做毫无意义。 (您希望此方法捕获文件被更改的事件;如果它实际上可以从任何地方调用,那么您如何知道文件是否实际上已更改,或者这是否只是来自其他地方的一些随机调用?)

关于c# - 如何从另一种方法结束 filewatcher?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3736955/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com