Tôi đang viết một giải pháp nơi tôi sử dụng một số tệp cấu hình có thể chỉnh sửa được khi chạy. Tôi đã sử dụng FileSystemWatcher
cho mục đích này trước và không bao giờ có nhiều vấn đề với nó nhưng bây giờ nó gây ra một CTD vào sự kiện 'đổi tên'.FileSystemWatcher gây ra sự cố cho máy tính để bàn
này (vô dụng) đoạn mã sẽ tạo lại vấn đề trong thiết lập của tôi:
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;
}
Vụ tai nạn xuất phát từ FileSystemWatcher
vẻ bề ngoài. Nếu tôi đặt điểm ngắt trong trình xử lý sự kiện cho FileSystemWatcher.Renamed
thì nó sẽ bị tấn công nhưng ứng dụng sẽ đổ vỡ khi tôi bước ra khỏi nó. Nếu tôi đặt điểm ngắt trong trình xử lý sự kiện FileSystemWatcher.Created
thì điều này không xảy ra.
Mọi đề xuất?
EDIT 1: Tôi đang chạy NET 4 trên x64 Windows 7 (Ultimate) nền tảng Tôi đã thấy một vài cuộc thảo luận liên quan đến loại hình này của vấn đề nhưng tất cả đã được liên quan đến người cố gắng cập nhật giao diện người dùng thứ (phải được thực hiện từ luồng chính/giao diện người dùng) từ trình xử lý sự kiện. Đó là lý do tại sao tôi chỉ cố gắng tăng một số quầy trong mã thử nghiệm.
Có một ngoại lệ? – David
Không, ứng dụng gặp sự cố với máy tính để bàn và có vẻ như tôi không thể bắt được. Đó là một ứng dụng WPF và tôi đang bắt tất cả các ngoại lệ chưa được giải quyết (Application.DispatcherUnhandledException) nhưng điều này không bị bắt. –
CTD là gì và nó hoạt động như thế nào? – Gabe