I have a method that has a for loop in it. In the for loop I want to update some label’s text on the mainform, but the changes are only done after the loop ends.
I tried to do it on another thread like this:
Thread firstthread = new Thread(new ThreadStart(myMethod));
firstthread.Start();
When I did that I got an InvalidOperationException because of trying to access controls on another thread or something like that.
How should I update the labels(or other controls) on the mainform from a loop while the loop is in progress?
You should use a
BackgroundWorker. Place your long running loop inside of theDoWorkevent handler; it will run in a background thread and not block the UI thread. You can setReportProgressto true and then attach an event handler to that to allow you to update a label (or whatever else) periodically. The ProgressReported event runs in the UI thread. You can also add a handler to the Completed event which runs in the UI thread as well.You can look at the MSDN page for BackgroundWorker for details and code samples.