Console.WriteLine在C#Eventhandler中不起作用

时间:2013-01-01 05:49:17

标签: c# console-application

class Program
{
    FileSystemWatcher _watchFolder;
    string sPath = @"D:\TestMonitor";
    static void Main(string[] args)
    {
        Program p = new Program();
        Thread t = new Thread(new ThreadStart(p.startActivityMonitoring));
        t.Start();
    }


    private void startActivityMonitoring()
    {
        _watchFolder = new FileSystemWatcher();
        _watchFolder.Path = Convert.ToString(sPath);
        _watchFolder.NotifyFilter = System.IO.NotifyFilters.DirectoryName;
        _watchFolder.NotifyFilter =
        _watchFolder.NotifyFilter | System.IO.NotifyFilters.FileName;
        _watchFolder.NotifyFilter =
        _watchFolder.NotifyFilter | System.IO.NotifyFilters.Attributes;
        _watchFolder.Changed += new FileSystemEventHandler(eventRaised);
        _watchFolder.Created += new FileSystemEventHandler(eventRaised);
        _watchFolder.Deleted += new FileSystemEventHandler(eventRaised);
        _watchFolder.Renamed += new System.IO.RenamedEventHandler(eventRaised);
        _watchFolder.EnableRaisingEvents = true;
    }



    private void eventRaised(object sender, System.IO.FileSystemEventArgs e)
    {
        switch (e.ChangeType)
        {
            case WatcherChangeTypes.Changed:
                Console.WriteLine(string.Format("File {0} has been modified\r\n", e.FullPath));

                break;
            case WatcherChangeTypes.Created:
                Console.WriteLine(string.Format("File {0} has been created\r\n", e.FullPath));

                break;
            case WatcherChangeTypes.Deleted:
                Console.WriteLine(string.Format("File {0} has been deleted\r\n", e.FullPath));

                break;
            default: // Another action
                break;
        }
    }

}

一个简单的程序使用FileSystemWatcher在我尝试使用Console.WriteLine记录更改时轮询目录内的更改但它不起作用。

由于Console.WriteLine在任何线程

中运行良好,因此不确定导致此问题的原因

1 个答案:

答案 0 :(得分:4)

您的程序在启动主题后立即退出。您需要保持程序运行。 一种简单的方法是包含一个Console.ReadLine来阻止程序退出。

static void Main(string[] args)
    {
        Program p = new Program();
        Thread t = new Thread(new ThreadStart(p.startActivityMonitoring));
        t.Start();
        Console.Writeline("Press enter to exit");
        Console.ReadLine();
    }

enter image description here