As Ben Voigt suggested, BackgroundWorker should probably be used here if you have no good reason to want to use something else.
Effective is a rather vague means of comparison. It is not entirely clear what you are looking for in the two options that you are considering.
BackgroundWorker simple and straightforward, and they avoid the use of timers.
Invoke more efficient than a timer in the sense that there will be less delay between bCheckState becoming true and updated text. It will also be less CPU intensive since you will not have a timer polling at a given interval.
Timer more efficient in the sense that the thread does not need to stop when called to update the text, but it is a little inefficient because it will waste processor checking time if the logical value has changed, and there may also be a delay before the timer interval length.
As another alternative, BeginInvoke can be used to update the form without using a timer and without a thread waiting for the call to complete. However, if it throws an exception, your thread may not recognize unless you also call EndInvoke , which will also stop the thread from executing until the call is completed.
All of them have their own advantages and disadvantages, and you cannot really name any particular another “effective” as a whole.
source share