Как мне продолжать смотреть каталог, пока не будет нажата кнопка выхода? - PullRequest
0 голосов
/ 07 марта 2012

Заранее спасибо, легко для большинства, без сомнения, но я новичок в программировании.

Мое первое приложение - это приложение 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 Ответ

0 голосов
/ 26 апреля 2016

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

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;
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...