C# 在C中调试时,FileSystemWatcher未命中断点#

C# 在C中调试时,FileSystemWatcher未命中断点#,c#,visual-studio-2010,debugging,text-files,filesystemwatcher,C#,Visual Studio 2010,Debugging,Text Files,Filesystemwatcher,我有一个包含FileSystemWatcher的方法来监视文本文件中的任何更改 public static void RunWatcher() { FileSystemWatcher watcher = new FileSystemWatcher(); watcher.Path = "D:\\CDR File"; watcher.NotifyFilter = NotifyFilters.LastAccess | NotifyFilters.LastWrite

我有一个包含FileSystemWatcher的方法来监视文本文件中的任何更改

public static void RunWatcher()
{
    FileSystemWatcher watcher = new FileSystemWatcher();
    watcher.Path = "D:\\CDR File";
    watcher.NotifyFilter = NotifyFilters.LastAccess | NotifyFilters.LastWrite
               | NotifyFilters.FileName | NotifyFilters.DirectoryName;
    watcher.Filter = "*.txt";
    watcher.Changed += new FileSystemEventHandler(OnChanged);
    watcher.EnableRaisingEvents = true;
}
这是我的方法,它是从RunWatcher()方法调用的

现在我已经在应用程序的主方法中调用了RunWatcher()方法,并在RunWatcher()方法中设置了一个断点。但是在调试时,我无法调用OnChanged。有什么问题吗?为什么它没有得到调试并达到临界点

以下是我根据汉斯·帕桑的建议所做的尝试

        string FileToCopy = "D:\\BEML.txt";

        if (System.IO.File.Exists(FileToCopy) == true)
        {
            var fs = new FileStream(FileToCopy, FileMode.Open, FileAccess.Read, FileShare.ReadWrite);
            using (var reader = new StreamReader(fs))
            {
                string line;
                string rawcdr;

                while ((line = reader.ReadLine()) != null)
                {
                }
            }
          }

OnChanged不是从RunWatcher调用的。EventHandler的调用由运行时在后台处理。
因此,您需要在OnChanged中设置断点

我在OnChanged中检查了设置断点并更改了文件..我仍然没有在控制台中看到输出..您是否使用调试信息构建了所有内容?如果没有它,您将无法设置断点。是的,我已经在调试模式下构建了解决方案。我的代码正确吗?当然,在OnChanged上设置断点。代码是非常不明智的,您不想使用FSW来度量这样的复制进度。你从中获得进步。希望您的D:驱动器不是无法工作的光盘驱动器。@HansPassant FileSystemWatcher将持续检查文本文件中的更新您正在为每个更改通知读取整个文件两次。如前所述,这是极其昂贵的,而且你失去变革活动的几率非常高。始终使用错误事件。通过使用FileShare.ReadWrite打开文件,而不是关闭它,这样您就不必从一开始就反复阅读它。请记住,在写入文件时无法可靠地检测文件结尾,最后一行可能是部分写入的文本行。您将把它算作一行,下一次写入将再次算作一行。@HansPassant抱歉,先生,我不知道如何使用FileShare.ReadWrite连续使用读取文本文件。请帮助我。。
        string FileToCopy = "D:\\BEML.txt";

        if (System.IO.File.Exists(FileToCopy) == true)
        {
            var fs = new FileStream(FileToCopy, FileMode.Open, FileAccess.Read, FileShare.ReadWrite);
            using (var reader = new StreamReader(fs))
            {
                string line;
                string rawcdr;

                while ((line = reader.ReadLine()) != null)
                {
                }
            }
          }