我正在编写一个解决方案,其中我使用了一些应该在运行时可编辑的配置文件。为此,我之前一直在使用 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;
}
崩溃似乎来自 FileSystemWatcher
。如果我在 FileSystemWatcher.Renamed
的事件处理程序中设置断点,它会被击中,但当我退出它时应用程序崩溃。如果我在 FileSystemWatcher.Created
事件处理程序中设置断点,则不会发生这种情况。
有什么建议吗?
编辑 1: 我在 Windows 7 x64(旗舰版)平台上运行 .NET 4 我看到过一些关于此类问题的讨论,但所有讨论都与尝试从事件处理程序更新 UI 内容(必须从主/UI 线程完成)的人有关。这就是为什么我只是尝试在实验代码中增加一些计数器。
最佳答案
澄清一下:
这里的问题是我的系统中的其他地方有更多/较老的 FileSystemWatcher
使用者,其中一个导致了未处理的异常。问题是异常在一个完全不同的线程中抛出并导致应用程序崩溃到桌面。时机让我误以为是我的新消费者以某种方式导致了问题,但当我听从 Chris Shain 的建议(参见问题条目中的评论)启用异常中断(msdn.microsoft.com/en-us/library/d14azbfh.aspx)时,我立即找到了真正的罪魁祸首。
我更愿意将解决方案归功于克里斯,但他从未重新发布过,所以在这里。希望我们学到了一些东西。
谢谢大家,祝编码愉快
/乔纳斯
关于c# - FileSystemWatcher 导致桌面崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8762942/