C # - Aktualisieren der GUI unter Verwendung von Nicht-Haupt-Thread
Ich habe ein Programm mit Klassen
GUIHochladeund ein Puffer zwischen den 2 Klassen - dh zur Kommunikation zwischen den 2 Klassen.DasUpload
Klasse verwendetProcess
, um eine Befehlszeilen-FTP-App auszuführen. Ich möchte die von der FTP-App erzeugte Ausgabe zurückgeben, um sie in einem @ anzuzeigetextbox
in der GUI.
Ich habe versucht, den folgenden Code zu verwenden, der abgeschnitten wurde.
Upload Class (beginProcess () ist eine Methode zum Starten des Threads (hier nicht gezeigt)):
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;
}
}
}
Buffer Class:
public void EventSubscriber()
{
uploadSession.WputOutput += Main.writeToTextBoxEvent;
}
Hauptklasse
public void writeToTextBoxEvent(object sender, DataReceivedEventArgs e)
{
if(this.textBox1.InvokeRequired)
{
MethodInvoker what now?
}
else
{
textBox1.Text = e.Data;
}
}
ie Sie sehen, sind mir beim writeToTextBoxEvent der Main-Methode die Ideen ausgegangen. Ich bin nicht sicher, ob ein UI-Update mithilfe eines benutzerdefinierten Ereignisses der beste Weg ist, dies zu tun. Wenn mich jemand in die richtige Richtung weisen könnte, wäre ich sehr dankbar.