【发布时间】:2011-04-25 22:15:50
【问题描述】:
我有一个有类的程序
- 图形界面
- 上传
- 和两个类之间的缓冲区——即用于在两个类之间进行通信。
Upload 类使用Process 运行命令行 FTP 应用程序。我想返回 FTP 应用程序生成的输出,以显示在 GUI 的 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;
}
}
如您所见,当谈到 Main 方法的 writeToTextBoxEvent 时,我已经没有想法了。我不确定使用自定义事件进行 UI 更新是否是最好的方法。如果有人能指出我正确的方向,我将不胜感激。
【问题讨论】:
标签: c# multithreading user-interface