Lets say I have a form called MainForm and a control on it: somelabel. In order to access these controls from another thread I have to use Invoke method. e.g:
somelabel.Invoke(...);
However I can also access the label through the form like this:
MainForm.Invoke(...) //Code for manipulating somelabel
Is there any difference between these two snippets in terms of performance or some other technical aspect?
No. Every Windows forms control exposes an Invoke method, and they all function the same way. No matter which control you use (whether the form or a child control), you’ll still doing the same basic operation, so performance will be the same.
I, personally, prefer to use the form instead of individual controls. This makes it easier to rework the design later, as you can remove or add controls without breaking your code that invokes through the form. Another good option is to use the WindowsFormsSynchronizationContext, which you can retrieve via SynchronizationContext.Current. This gives you a way to generate a synchronization context you can use (via Send/Post instead of Invoke) that does the same thing, but is not tied to any control.