views:

50

answers:

1

Here's my problem: I'm making a product upload module (main form) in C#. I read data from excell files, then upload into database, then I'm resizeing the images and uploading via FTP. Everything works fine. Now I want to add a progress bar. I've made a new form, I've add two progress bars, and made public methods for giving new value to the progress bars, and a third method, to output a text when finished. If I place an instance of it into the main form, it works, but I am making hard operations (resizeing image, uploading into ftp) and the CPU can't trace the progressbar as fast as it changes. So the solution would be to start the progress form in a new thread. I have tried many different ways to do it but without success. The main problem is that I should trigger the public methods of the progress form from the main form.

I have never made progressbars in c# before, can you tell me please which is the easiest and simplest way to do it?

+1  A: 

I think perhaps you would be best performing the the intensive actions in the separate thread and then marshal events back to your progress form in order to display to the user the progress.

When you have separate threads you can't just update the GUI from those threads. You should look at using Invoke MSDN.

This example also shows a simple example of how you can use a worker thread to perform your more intensive tasks.

   private void Button_Click(object sender, EventArgs e)
  {
     myThread = new Thread(new ThreadStart(ThreadFunction));
     myThread.Start();
  }
  private void ThreadFunction()
  {
     MyThreadClass myThreadClassObject  = new MyThreadClass(this);
     myThreadClassObject.Run();
  }
MrEdmundo
thanks. I have put the intensive actions into a new thread. The progressbar starts in the main, so it's working perfectly.
Ervin