0

我一直在逼自己发疯,试图今天解决这个问题。一段时间以来,我一直在使用 FileSystemWatcher 来捕获文件更改。我最初在框架 3.5 上的一个项目已移至 4.0 以利用一些 EF 东西,它似乎影响了 Visual Studio 允许我调试利用 FileSystemWatcher 的代码的方式。这是我遇到的问题的一个小例子(请参阅 watcher_Changed):

class Program
{
    static void Main(string[] args)
    {
        FileSystemWatcher watcher = new FileSystemWatcher(@"C:\inputFolder\");

        watcher.Changed += new FileSystemEventHandler(watcher_Changed);
        watcher.NotifyFilter = NotifyFilters.LastAccess
            | NotifyFilters.LastWrite
            | NotifyFilters.FileName
            | NotifyFilters.DirectoryName;

        Console.WriteLine("Ready");

        watcher.EnableRaisingEvents = true;
        Thread.Sleep(System.Threading.Timeout.Infinite);
    }

    static void watcher_Changed(object sender, FileSystemEventArgs e)
    {
        //This exception here (just an example), does not get sent to the debugger, rather it goes to the
        //console and then the application exits
        throw new ArgumentException();
    }
}

将 ArgumentException 扔到控制台后,代码将始终为我关闭。在更复杂的情况下,这给我带来了一些主要的调试问题。

有任何想法吗?

4

1 回答 1

0

我认为这是因为 Visual Studio 未配置为在System.ArgumentException抛出时中断,而是在用户处理时中断。由于异常发生在由它创建的线程中,FileSystemWatcher它可能没有任何类型的顶级异常处理程序。

要更改调试设置,请转到 Debug\Exceptions,然后展开Common Language Runtime Exceptions并搜索异常。或者使用Find...按钮。然后确保勾选了“Thrown”复选框。请注意,您可能通常不希望使用此选项,因为许多应用程序可能会正常处理异常。

于 2013-01-07T22:06:01.020 回答