C # - Actualización de la GUI usando un subproceso no principal

Tengo un programa que tiene clases

GUISubiry un búfer entre las 2 clases, es decir, se utiliza para comunicarse entre las 2 clases.

losUpload usos de claseProcess para ejecutar una aplicación FTP de línea de comando. Quiero devolver qué salida producida por la aplicación FTP se mostrará en untextbox en la GUI
He intentado usar el siguiente código que se ha truncado.

Upload Class (beginProcess () es un método utilizado para iniciar el subproceso (no se muestra aquí)):

public delegate void WputOutputHandler(object sender, DataReceivedEventArgs e);
class Upload
{
    private WputOutputHandler wputOutput;

    beginProcess()
    {
        Process pr = new Process();                                                 
        pr.StartInfo.FileName = @"wput.exe";                                        
        pr.StartInfo.RedirectStandardOutput = true;
        pr.StartInfo.UseShellExecute = false;
        pr.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
        pr.OutputDataReceived += new DataReceivedEventHandler(OnDataReceived);
        pr.ErrorDataReceived += new DataReceivedEventHandler(OnDataReceived);
        pr.Start();                                                                 
        pr.BeginOutputReadLine();
        pr.WaitForExit();
    }


    public void OnDataReceived(object sender, DataReceivedEventArgs e)
    {
        if(wputOutput != null)
        {
            wputOutput(sender, e);
        }
    }


    public event WputOutputHandler WputOutput
    {
        add
        {
            wputOutput += value;
        }
        remove
        {
            wputOutput -= value;
        }
    }
}

Clase de amortiguación:

public void EventSubscriber()
{
    uploadSession.WputOutput += Main.writeToTextBoxEvent;
}

Clase principal:

public void writeToTextBoxEvent(object sender, DataReceivedEventArgs e)
{
    if(this.textBox1.InvokeRequired)
    {
        MethodInvoker what now?
    }
    else
    {
        textBox1.Text = e.Data;
    }
}

Como puede ver, cuando se trata del método WriteToTextBoxEvent del método Main, me he quedado sin ideas. No estoy seguro de si hacer una actualización de la interfaz de usuario utilizando un evento personalizado es incluso la mejor manera de hacerlo. Si alguien pudiera señalarme en la dirección correcta, estaría muy agradecido.

Respuestas a la pregunta(5)

Su respuesta a la pregunta