线程和代理 - Filewatcher

时间:2014-08-23 17:51:59

标签: c# multithreading

我正在尝试创建一个监视文件夹的C#winforms应用程序,并在创建新文件时应该这样做 a)将文件复制到新文件夹 b)使用复制的文件数更新表单上的标签

当我尝试复制文件或更新标签时,我收到了跨线程异常。

我不了解每个线程发生了什么或者应该发生什么。

问题1:在我的主表单上,我有以下内容。我在假设中是否正确 a)表单在线程上运行(比如UIThread) b)当我实例化Watcher时,它从第二个线程开始(比如WatcherThread)

    System.IO.FileSystemWatcher watcher1;
    private void SetupWatchers()
    {
        watcher1 = new System.IO.FileSystemWatcher();
        watcher1.Filter = "*.*";
        watcher1.NotifyFilter = NotifyFilters.FileName;
        watcher1.Path = this.txtSourceFolder1.Text;
        watcher1.IncludeSubdirectories = false;
        watcher1.Created += new FileSystemEventHandler(F1Changed);
    }

问题2:我在假设时是否正确: a)Watcher(在WatcherThread上)将在创建文件时在Form Class(UIThread)中引发一个事件 b)下面的代码创建一个EventHandler,并将事件指向名为F1Changed的委托方法? (但我没有在任何地方使用委托一词???)

    watcher1.Created += new FileSystemEventHandler(F1Changed);

然后我定义了上面提到的委托方法(F1Changed)。

    private void F1Changed(object sender, FileSystemEventArgs e)
    {
        FilesCopied1 += 1;
        System.IO.File.Copy(e.FullPath, System.IO.Path.Combine( this.txtDestFolder1.Text, e.Name));
        this.lblFilesCopied1.Text = FilesCopied1.ToString();
    }

问题3:此方法运行的是什么线程,UIThread或WatcherThread,因为这是跨线程异常发生的地方,应用程序才关闭。

问题4:如何正确编码?

0 个答案:

没有答案