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.