여기 지침을 따르고 있습니다 FileSystemWatcher Changed event is raised twice.파일 목록에 대한 FileSystemwatcher
그러나 20 개의 파일을 함께 삭제하면 20 개의 파일이 삭제되므로보고있는 파일 목록이 있습니다. 이것은 예상과 잘 작동합니다.
20 동시 "파일 변경 (예 : Onchanged
첫 번째 인스턴스의 코드가 완료 될 때까지 다른 모든 파일 변경 사항을 무시할 수있는 한 번만 이벤트를 발생시킬 수 있습니다.) 지금 Onchanged
20 번 호출됩니다. .)?
private void Main_Load(object sender, EventArgs e)
{
public static List<FileSystemWatcher> watchers = new List<FileSystemWatcher>();
UpdateWatcher();
}
public void OnChanged(object sender, FileSystemEventArgs e)
{
try
{
Logging.Write_To_Log_File("Item change detected " + e.ChangeType + " " + e.FullPath + " " + e.Name, MethodBase.GetCurrentMethod().Name, "", "", "", "", "", "", 2);
watchers.Clear();
foreach (FileSystemWatcher element in MyGlobals.watchers)
{
element.EnableRaisingEvents = false;
}
//Do some processing on my list of files here....
return;
}
catch (Exception ex)
{
// If exception happens, it will be returned here
}
finally
{
foreach (FileSystemWatcher element in MyGlobals.watchers)
{
element.EnableRaisingEvents = true;
}
}
}
public void UpdateWatcher() // Check Items
{
try
{
watchers.Clear();
for (int i = 0; i < MyGlobals.ListOfItemsToControl.Count; i++) // Loop through List with for
{
FileSystemWatcher w = new FileSystemWatcher();
w.Path = Path.GetDirectoryName(MyGlobals.ListOfItemsToControl[i].sItemName); // File path
w.Filter = Path.GetFileName(MyGlobals.ListOfItemsToControl[i].sItemName); // File name
w.Changed += new FileSystemEventHandler(OnChanged);
w.Deleted += new FileSystemEventHandler(OnChanged);
w.Created += new FileSystemEventHandler(OnChanged);
w.EnableRaisingEvents = true;
watchers.Add(w);
}
}
catch (Exception ex)
{
// If exception happens, it will be returned here
}
}
파일 시스템 감시자가이 코드보다 앞에있는 것처럼 보입니다. lastfired 값을 업데이트 할 수있을 때까지 이벤트는 이미 40 개의 파일을 삭제할 때 4 번 호출되었습니다. 나는 이것이 얼마나 빨리 PC의 기능인지 짐작한다. 따라서 위의 코드는 결함이 있다고 말할 수 있습니다. 다른 아이디어? – user1438082
공정하기 때문에 당신의 대답은 아주 좋고 내가 사용할 수있는 최선이라고 생각합니다. – user1438082