Atualizando GUI usando thread não principal
Eu tenho um programa que tem aulas
GUIEnvioe um buffer entre as 2 classes - isto é, usado para se comunicar entre as 2 classes.oUpload
classe usaProcess
para executar um aplicativo FTP de linha de comando. Desejo retornar a saída produzida pelo aplicativo FTP a ser exibida em umtextbox
na GUI.
Eu tentei usar o seguinte código que foi truncado.
Classe de Upload (beginProcess () é um método usado para iniciar o Thread (não mostrado aqui)):
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;
}
}
}
Classe de buffer:
public void EventSubscriber()
{
uploadSession.WputOutput += Main.writeToTextBoxEvent;
}
Classe principal:
public void writeToTextBoxEvent(object sender, DataReceivedEventArgs e)
{
if(this.textBox1.InvokeRequired)
{
MethodInvoker what now?
}
else
{
textBox1.Text = e.Data;
}
}
Como você pode ver, quando se trata de writeToTextBoxEvent do método Main, fiquei sem ideias. Não tenho certeza se fazer uma atualização da interface do usuário usando um evento personalizado é a melhor maneira de fazê-lo. Se alguém pudesse me indicar a direção certa, ficaria muito grato.