C# Windows Forms Application - Updating GUI from another thread AND class?

.net, c#, multithreading, winforms

Solution

Check the `InvokeRequired` of the `Control` class, and if it's true, then call the `Invoke` and pass in a delegate (usually an anonymous method) that does what you want to do on the client's thread.

Example:

public void DoWork(Form form)
{
    if (form.InvokeRequired)
    {
        // We're on a thread other than the GUI thread
        form.Invoke(new MethodInvoker(() => DoWork(form)));
        return;
    }

    // Do what you need to do to the form here
    form.Text = "Foo";
}

Problem

I've searched a ton, but I can't seem find anything relating to my specific problem. I want to be able to update my MainUI form from another class (SocketListener) and within that I have a thread that handles the networking (clientThread). Right now I can run simple outputs from the networking thread such as writing to the debugger output and creating a MessageBox. But what I really want to do is be able to invoke code from the clientThread that will do things on my MainUI instance. How can I do this? Also, if anyone wants specific portions of the code then I can post it to help give you a better understanding of what I'm asking. Best regards!

Original source