Я пишу решение, в котором я использую некоторые файлы конфигурации, которые должны быть доступны для редактирования во время выполнения. Я использовал 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) Я видел несколько дискуссий, посвященных этому типу проблем, но все они были связаны с людьми, пытающимися обновить элементы пользовательского интерфейса (которые должны выполняться из основного потока / потока пользовательского интерфейса) из обработчиков событий. Вот почему я просто пытаюсь увеличить некоторые счетчики в экспериментальном коде.