我一直在疯狂地试图想象今天这个。我一直在使用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抛给控制台后,代码将始终关闭。在更复杂的情况下,这会给我带来一些重大调试问题。
任何想法?
答案 0 :(得分:0)
我认为这是因为Visual Studio未配置为在引发System.ArgumentException
时中断,而是在用户处理时。由于在FileSystemWatcher
创建的线程中发生异常,它可能没有任何类型的顶级异常处理程序。
要更改调试设置,请转到Debug \ Exceptions,然后展开Common Language Runtime Exceptions
并搜索异常。或者使用Find...
按钮。然后确保选中“Thrown”复选框。请注意,您可能通常不需要此选项,因为许多应用程序可能会正常处理异常。