2012-03-07 2 views
0

Спасибо заранее, легко для большинства без сомнения, но я новичок в программировании.Как сохранить просмотр каталога до нажатия кнопки выхода?

Мое первое приложение - это приложение winform, которое позволяет пользователю выбирать каталог и, когда он нажимает кнопку «Пуск», инициализируется FileSystemWatcher. Все работает, и я обрабатывал изменения, удаления и т. Д., Но моя проблема в том, что он обрабатывает только одно событие (хотя и правильно), но после этого он закрывается.

Мне нужно установить

Watcher.EnableRaisingEvents=True

, пока кнопка выхода не будет нажата?

Здесь код в настоящее время:

public void btnStart(object sender, EventArgs e) 
    { 
     //create watcher and set properties 

     FileSystemWatcher Watcher1 = new FileSystemWatcher(); 

     Watcher1.Path = txtBoxDirToWatch.Text; 

     if (Watcher1.Path.Length <2) 
     { 
      MessageBox.Show("Path does not exist, Please reselect"); 
      return; 
     } 

     //user response to close 
     MessageBox.Show("Your directory is now being monitored for changes"); 

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

     //watch all files in the path 

     Watcher1.Filter = "*.*"; 

     //add event handlers 

     Watcher1.Changed += new FileSystemEventHandler(OnChanged); 
     Watcher1.Created += new FileSystemEventHandler(OnChanged); 
     Watcher1.Deleted += new FileSystemEventHandler(OnDeleted); 
     Watcher1.Renamed += new RenamedEventHandler(OnRenamed); 

     //begin watching 

     Watcher1.EnableRaisingEvents = true;  

    } 

    public static void OnChanged(object source, FileSystemEventArgs e) 

    { 

     //need something in here to deal with changes and copy to hidden directory 

     string destination = Path.Combine(@"C:\Watcher\sync", e.Name); 

     File.Copy(e.FullPath, destination); 

    } 

    public static void OnRenamed(object source, FileSystemEventArgs e) 
    { 

я обрабатывать onrenamed, ondeleted и т.д.

Может кто-нибудь дать толчок в правильном направлении, пожалуйста?

Благодаря

+1

Пожалуйста, пост код, показывающий, как создается наблюдающий, обработчик и т.д. Есть много возможных причин, это может быть сбой. С контекстом мы можем быть более полезными. – Opsimath

+0

Извините @DavidFerguson Я думал, что я добавил код изначально, спасибо – liammcdee

ответ

0

Решение здесь было создать новый поток для каждого при запуске программы и установить EnableRaisingEvents = новые на каждом.

new Thread(ReNamed).Start(); new Thread(Changed).Start(); new Thread(Deleted).Start(); new Thread(Created).Start();

void ReNamed() 
    { 
     FileSystemWatcher Watcher2 = new FileSystemWatcher(); 

     Watcher2.Path = txtBxDirToWatch.Text; 
     Watcher2.NotifyFilter = NotifyFilters.FileName | NotifyFilters.DirectoryName;// | NotifyFilters.LastAccess | NotifyFilters.LastWrite | NotifyFilters.DirectoryName; 

     //watch all files in the path 

     Watcher2.Filter = "*.*"; 

     //dont watch subdirectories as default 
     Watcher2.IncludeSubdirectories = false; 
     if (chkBxIncSub.Checked) 
     { 
     Watcher2.IncludeSubdirectories = true; 
     } 

     Watcher2.Renamed += new RenamedEventHandler(OnRenamed); 
     Watcher2.EnableRaisingEvents = true; 
    }