@JM.

there are cases where accessing controls from a secondary thread is unavoidable.
BTW. I learned almost exactly that code from you in 2007