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;
}

Похоже, сбой происходит из-за FileSystemWatcher . Если я установил точку останова в обработчике событий для FileSystemWatcher.Renamed , он сработает, но приложение выйдет из строя, когда я выйду из него. Если я установил точку останова в обработчике событий FileSystemWatcher.Created , этого не произойдет.

Есть предложения?


РЕДАКТИРОВАТЬ 1: Я использую .NET 4 на платформе Windows 7 x64 (Ultimate) Я видел несколько дискуссий, посвященных этому типу проблем, но все они были связаны с людьми, пытающимися обновить элементы пользовательского интерфейса (которые должны выполняться из основного потока / потока пользовательского интерфейса) из обработчиков событий. Вот почему я просто пытаюсь увеличить некоторые счетчики в экспериментальном коде.

11
задан Yuck 6 January 2012 в 19:44
поделиться