Using C# MethodInvoker.Invoke() for a GUI app... is this good? Using C# MethodInvoker.Invoke() for a GUI app... is this good? multithreading multithreading

Using C# MethodInvoker.Invoke() for a GUI app... is this good?


The method.Invoke() call executes the delegate on the current executing thread. Using the BeginInvoke(method) ensures that the delegate is called on the GUI thread.

This is the correct way of avoiding code duplication when the same method can be called both from the GUI thread and other threads.


Personally I like this method:

private void ExecuteSecure(Action a){    if (InvokeRequired)        BeginInvoke(a);    else        a();}

And then you can write one-liners like this:

ExecuteSecure(() => this.Enabled = true);


Keep in mind that Control.InvokeRequired returns false if you are on background thread AND Control.IsHandleCreated is false. I would safeguard the code with a Debug.Assert that checks for unmanaged handle creation.