I'm a newbie with multithreading. I have a winform that have a label and a progress bar.
I wanna show the processing result. Firstly, I use Application.DoEvents() method. But, I find that the form is freezing. 
Then I read some article about multithreading at MSDN.
Secondly, I use a BackgroundWorker to do it.
this.bwForm.DoWork += (o, arg) => { DoConvert(); };
this.bwForm.RunWorkerAsync();
The form doesn't freeze that I can drag/drog when processing. Unfortunately, it throws an InvalidOperationException. So I have to use this. Control.CheckForIllegalCrossThreadCalls = false; I ensure that's  not a final solution. 
Do you have some suggestion to do so, Experts?
Edit: When I call listview throw InvalidOperationException. This code is in DoWork().
          foreach (ListViewItem item in this.listView1.Items)
            {
                //........some operation
                 lbFilesCount.Text = string.Format("{0} files", listView1.Items.Count);
                 progressBar1.Value++;
            }
Edit2: I use delegate and invoke in DoWork() and it don't throw exeption. But the form is freezing again. How to do it so the form could be droppable/drappable while processing?
 
     
     
     
     
     
     
     
     
     
     
    