У меня есть программа, которая имеет классы
- GUI
- Загрузить
- и буфер между двумя классами - т.е. используется для связи между двумя классами.
Класс Upload
использует Process
для запуска приложения FTP из командной строки. Я хочу вернуть вывод, выданный приложением FTP, в textbox
в графическом интерфейсе.
Я попытался использовать следующий код, который был усечен.
Класс загрузки (beginProcess () - это метод, используемый для запуска потока (здесь не показан)):
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;
}
}
}
Класс буфера:
public void EventSubscriber()
{
uploadSession.WputOutput += Main.writeToTextBoxEvent;
}
Основной класс:
public void writeToTextBoxEvent(object sender, DataReceivedEventArgs e)
{
if(this.textBox1.InvokeRequired)
{
MethodInvoker what now?
}
else
{
textBox1.Text = e.Data;
}
}
Как вы можете видеть, когда дело доходит до метода writeToTextBoxEvent метода Main, у меня заканчиваются идеи. Я не уверен, что обновление пользовательского интерфейса с помощью пользовательского события - даже лучший способ сделать это. Если бы кто-то мог указать мне правильное направление, я был бы очень признателен.