Rafael Carvalho
Rafael Carvalho

Reputation: 2046

How to Transfer Files in different Threads with FileWatcher

I have a form with a File Watcher to which he transfers to multiple addresses all video files placed in a folder. What is the best option so that when multiple files are added to even be able to perform each transfer in a thread. Here's an example of my code:

DockingBarTransferEntities context = new DockingBarTransferEntities();

private void fileSystemWatcher1_Changed(object sender, System.IO.FileSystemEventArgs e)
        {
            IEnumerable<Diretorios> directories = context.Diretorios.ToList();            

            foreach (var destino in directories)
            {
                try
                {
                   Transfere(e.FullPath,Path.GetFileName(e.FullPath),destino);

                }
                catch (Exception ex)
                {
                    textBox1.Text += "Error: " + ex.Message;
                }
            }
        }

        public void Transfere(string fullPath, string name, Diretorios diretorio)
        {           
            try
            {
                if (Directory.Exists(diretorio.Caminho))
                {
                    string fileName = Path.GetFileName(fullPath);
                    fileName = String.Format("{0}\\{1}", diretorio.Caminho, fileName);

                    FileInfo arquivo = new FileInfo(fullPath);

                    arquivo.CopyTo(fileName, true);                  

                }
            }
            catch (Exception ex)
            {

            }
        }

Upvotes: 0

Views: 88

Answers (1)

user27414
user27414

Reputation:

It should be as simple as this:

Task.Factory.StartNew(() => Transfere(e.FullPath, Path.GetFileName(e.FullPath), destino));

instead of calling Transfere directly.

Upvotes: 1

Related Questions