I’ve seen the common setup for cross threading access to a GUI control, such as discussed here:
Shortest way to write a thread-safe access method to a windows forms control
All the web hits I found describe a similar thing.
However, why do we need to check InvokeRequired? Can’t we just call Invoke directly?
I assume the answer is no, so my real question is ‘why’?
From non-UI threads we can’t touch the UI – very bad things can happen, since controls have thread affinity. So from a non-UI thread we must (at a minumum) call
InvokeorBeginInvoke.For UI-threads, however – we don’t want to call
Invokelots of time; the issue is that if you are already on the UI thread, it still has the unnecessary overhead of sending a message to the form’s pump and processing it.In reality, in most threading code you know you expect a specific method to be called on a non-UI thread, so in those cases, there is no additional overhead: just call
Invoke.