It looks like you're starting a background thread which simply calls
Invoke
. This pushes all of the logic back onto the UI thread, as if you'd never started a background thread in the first place. The only difference is, you now have a second thread stuck waiting for the logic to finish.
Remove the monolithic
Invoke
call, and instead wrap each call that accesses or updates a UI control in its own
Invoke
call.
So, instead of:
this.Invoke(new MethodInvoker(delegate{
...
});
use:
this.Invoke(new MethodInvoker(delegate{
});
this.Invoke(new MethodInvoker(delegate{
});
...