当文件监视器事件被触发时,Windows窗体崩溃

本文关键字:Windows 窗体 崩溃 文件 监视器 事件 | 更新日期: 2023-09-27 18:04:30

我正试图将文件监控实现为windows窗体应用程序,我遇到了一个问题。当事件被触发时,我的表单总是崩溃。

    public Form1()
    {
        InitializeComponent();
    }
    private void Form1_Load(object sender, EventArgs e)
    {
        textBox1.Text = "";
        FileSystemWatcher watch = new FileSystemWatcher();
        watch.Path = @"C:'files'";
        watch.NotifyFilter = NotifyFilters.LastAccess | NotifyFilters.LastWrite | NotifyFilters.FileName | NotifyFilters.DirectoryName;
        watch.Filter = "*.txt";
        watch.Changed += new FileSystemEventHandler(writeTb);
        watch.Created += new FileSystemEventHandler(writeTb);
        watch.Deleted += new FileSystemEventHandler(writeTb);
        watch.Renamed += new RenamedEventHandler(writeTb);
        watch.EnableRaisingEvents = true;
    }
    private void writeTb(object source, FileSystemEventArgs e)
    {
        textBox1.Text += e.ChangeType + ": " + e.FullPath;
    }

当文件监视器事件被触发时,Windows窗体崩溃

FileSystemWatcher事件是从一个新线程调用的,如果你想更新任何控件,你必须将Invoke返回到UI线程

 private void writeTb(object source, FileSystemEventArgs e)
 {
    base.Invoke((Action)delegate
    {
       textBox1.Text += e.ChangeType + ": " + e.FullPath;
    });
 }