FileSystemWatcher导致桌面崩溃

Jon*_*att 11 .net c# filesystemwatcher

我正在编写一个解决方案,我在其中使用一些应该在运行时可编辑的配置文件.我之前一直FileSystemWatcher在为此目的而使用它并且从来没有遇到太多问题,但现在它在"重命名"事件上引起了CTD.

这段(无用的)代码将在我的设置中重现问题:

private static int _s_renamed;
private static int _s_created;
private static int _s_errors;

private static void monitorConfiguration(string configRootFolder)
{
    var fsw = new FileSystemWatcher(configRootFolder, ConfigFilePattern)
    {
        NotifyFilter = NotifyFilters.LastWrite | NotifyFilters.FileName,
        IncludeSubdirectories = false
    };
    fsw.Renamed += (sender, args) => ++_s_renamed; // <-- ! CTD efter this one !
    fsw.Created += (sender, args) => ++_s_created;
    fsw.Error += (sender, args) => ++_s_errors; 
    fsw.EnableRaisingEvents = true;
}
Run Code Online (Sandbox Code Playgroud)

崩溃FileSystemWatcher似乎来自它.如果我在事件处理程序中设置一个断点,FileSystemWatcher.Renamed它会被命中,但是当我走出它时应用程序崩溃了.如果我在FileSystemWatcher.Created事件处理程序中设置断点,则不会发生这种情况.

有什么建议?


编辑1:我在Windows 7 x64(Ultimate)平台上运行.NET 4我已经看过几个关于此类问题的讨论,但所有这些都与尝试更新UI内容的人有关(必须从主要/来自事件处理程序的UI线程).这就是我尝试在实验代码中增加一些计数器的原因.

Jon*_*att 1

只是为了澄清:

这里的问题是我FileSystemWatcher的系统中其他地方有更多/更老的消费者,其中之一导致了未处理的异常。问题是异常在完全不同的线程中抛出并导致应用程序崩溃到桌面。这个时机让我误以为是我的新消费者以某种方式导致了问题,但是当我遵循 Chris Shain 的建议(请参阅问题条目中的评论)以启用异常中断时 ( msdn.microsoft.com/en-us/library/d14azbfh .aspx)我立即找到了真正的罪魁祸首。

我更愿意将解决方案归功于克里斯,但他从未重新发布过,所以就在这里。希望我们学到了一些东西。

谢谢大家,编码愉快

/乔纳斯