FileSystemWatcher阻止调试器捕获异常

时间:2013-01-07 21:51:14

标签: c# visual-studio-2010 filesystemwatcher

我一直在疯狂地试图想象今天这个。我一直在使用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抛给控制台后,代码将始终关闭。在更复杂的情况下,这会给我带来一些重大调试问题。

任何想法?

1 个答案:

答案 0 :(得分:0)

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

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