Piszę rozwiązanie, w którym używam niektórych plików konfiguracyjnych, które powinny być edytowalne w środowisku wykonawczym. Używałem w tym celu FileSystemWatcher
i nigdy nie miałem z nim problemów, ale teraz powoduje to CTD w przypadku zmiany nazwy.FileSystemWatcher powoduje awarię na pulpicie
To (bezużyteczny) fragment kodu będzie odtworzyć problem w mojej konfiguracji:
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;
}
Katastrofa pochodzi z FileSystemWatcher
się wydaje. Jeśli ustawię punkt przerwania w module obsługi zdarzeń dla FileSystemWatcher.Renamed
, zostanie on trafiony, ale aplikacja ulega awarii, gdy się z niego wycofam. Jeśli ustawię punkt przerwania w obsłudze zdarzeń FileSystemWatcher.Created
, tak się nie stanie.
Wszelkie sugestie?
EDIT 1: biegnę .NET 4 na Windows 7 x64 (Ostateczny) platforma Widziałem kilka dyskusji dotyczących tego typu problemów, ale wszystko zostało związane z ludzi, którzy próbują zaktualizować UI rzeczy (które musi być wykonane z wątku głównego/UI) z procedur obsługi zdarzeń. Właśnie dlatego próbuję zwiększyć liczbę liczników w kodzie eksperymentalnym.
Czy istnieje wyjątek? – David
Nie, aplikacja ulega awarii na pulpicie i wygląda na to, że nie mogę jej złapać. Jest to aplikacja WPF i przechwytywanie wszystkich nieobsługiwanych wyjątków (Application.DispatcherUnhandledException), ale ten nie został złapany. –
Co to jest CTD i co robi? – Gabe