下面是我的文件觀察者類我寫代碼:如何從另一種方法結束filewatcher?
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對象的聲明移到它所在的方法之外來做到這一點,但我想知道是否有其他方法可以做到這一點。
雖然你的第二個解決方案的工作,我很想實現它,你爲什麼極力推薦移動的方法外FileSystemWatcher的對象? – xbonez 2010-09-17 16:07:24
但我仍然可以實現你的第二個解決方案,並使OnChanged成爲一個私有方法,不是嗎?任何理由我不應該這樣做? – xbonez 2010-09-17 16:10:54
@xbonez:主要是因爲'FileSystemWatcher'對象本身在邏輯上是FileWatcher類的一個組件,所以將它作爲成員字段可以讓它直接與它進行交互。你通過什麼獲得*而不是分配給一個領域?如果您向班級介紹*任何*其他代碼,您希望與觀察者進行交互,那麼如果不保留對其的引用,就不可能這樣做。 – 2010-09-17 16:12:58