0

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

1 に答える 1

1

FileSystemWatcherイベントは新しいスレッドから呼び出されます。コントロールを更新する場合は、UIスレッドに戻る必要がありますInvoke

 private void writeTb(object source, FileSystemEventArgs e)
 {
    base.Invoke((Action)delegate
    {
       textBox1.Text += e.ChangeType + ": " + e.FullPath;
    });
 }
于 2013-03-19T00:20:15.133 に答える