cross-thread calls?
<p>This is mt first time trying to write a not web based program, and my first time writing anything in C#.</p>

<p>I need a program that monitors folders, but I can't get it to work.
I have used the example from this post <a href="http://stackoverflow.com/questions/6943908/using-filesystemwatcher-with-multiple-files">Using FileSystemWatcher with multiple files</a> but is trying to make it a form.</p>

<p>My current problem comes in the ProcessQueue function where fileList apparently is defined in another thread.
Whenever a file is actually submitted to the watched folder I get an error that using fileList is a cross thread call</p>

<p>Can anyone explain this error to me, and how to fix it?</p>

<pre><code>namespace matasWatch
{
    public partial class Form1 : Form
    {
        private int n = 1;
        private bool isWatching = false;
        private List&lt;string&gt; filePaths;
        private System.Timers.Timer processTimer;
        private string watchedPath;
        private FileSystemWatcher watcher;

        public Form1()
        {
            filePaths = new List&lt;string&gt;();
            watchedPath = "C:\\Users\\username\\Desktop\\test";
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            if (!isWatching)
            {
                button1.Text = "Stop";
                isWatching = true;
                watcher = new FileSystemWatcher();
                watcher.Filter = "*.*";
                watcher.Created += Watcher_FileCreated;
                watcher.Error += Watcher_Error;
                watcher.Path = watchedPath;
                watcher.IncludeSubdirectories = true;
                watcher.EnableRaisingEvents = true;
            }
            else {
                button1.Text = "Watch";
                isWatching = false;

                watcher.EnableRaisingEvents = false;
                watcher.Dispose();
                watcher = null;
            }
        }

        private void Watcher_Error(object sender, ErrorEventArgs e)
        {
            // Watcher crashed. Re-init.
            isWatching = false;
            button1_Click(sender, e);
        }

        private void Watcher_FileCreated(object sender, FileSystemEventArgs e)
        {
            filePaths.Add(e.FullPath);

            if (processTimer == null)
            {
                // First file, start timer.
                processTimer = new System.Timers.Timer(2000);
                processTimer.Elapsed += ProcessQueue;
                processTimer.Start();
            }
            else{
                // Subsequent file, reset timer.
                processTimer.Stop();
                processTimer.Start();
            }
        }

        private void ProcessQueue(object sender, ElapsedEventArgs args)
        {
            try
            {
                fileList.BeginUpdate();
                foreach (string filePath in filePaths)
                {
                    fileList.Items.Add("Blaa");
                }
                fileList.EndUpdate();
                filePaths.Clear();
            }
            finally
            {
                if (processTimer != null)
                {
                    processTimer.Stop();
                    processTimer.Dispose();
                    processTimer = null;
                }
            }
        }
    }
}
</code></pre>
