使用流程输出更新文本框

时间:2014-05-06 13:07:41

标签: c# wpf batch-file

我正在尝试使用bat文件的输出更新文本框。

点击按钮,我运行我的bat文件。

{
proc = new Process();
proc.StartInfo.FileName = @"E:\comm.bat";

proc.StartInfo.UseShellExecute = false;
proc.StartInfo.RedirectStandardOutput = true;
proc.StartInfo.RedirectStandardError = true;
proc.EnableRaisingEvents = true;
proc.StartInfo.CreateNoWindow = true;

proc.ErrorDataReceived += DataReceived;
proc.OutputDataReceived += DataReceived;

proc.Start();

proc.BeginErrorReadLine();
proc.BeginOutputReadLine();

proc.WaitForExit();
}

void DataReceived(object sender, DataReceivedEventArgs e)
{
    if (e.Data != null)
    {
        textBox1.Dispatcher.BeginInvoke(DispatcherPriority.Normal, new SetText(UpdateText(e.Data)));

    }
}

public delegate void SetText();

public void UpdateText(String str)
{
  textBox1.AppendText = str;
}

e.Data包含我想在TextBox中更新的字符串。 如何将e.Data传递给UpdateText

我收到错误

  

错误CS1656:无法分配给' AppendText'因为这是一种方法   组'

     

错误CS0149:预期的方法名称

我怎样才能让它发挥作用? 感谢

3 个答案:

答案 0 :(得分:4)

Dispatcher.BeginInvokeDispatcher所关联的线程上指定的参数数组异步执行指定的委托。你这样做是错误的。试试这个

    void DataReceived(object sender, DataReceivedEventArgs e)
    {
        if (e.Data != null)
        {
            textBox1.Dispatcher.BeginInvoke(new SetText(UpdateText), DispatcherPriority.Normal, e.Data);            }
    }

答案 1 :(得分:2)

AppendText是一种可以解决错误的方法。如果你想分配你应该做的字符串:

textBox1.Text = str;

如果你想追加它:

textBox1.AppendText(str);

答案 2 :(得分:0)

您尝试在调度程序上调用该方法的方式是错误的。在摆弄C#之前,您需要投入更多精力学习WPF基础知识。据说,错误,

  

错误CS1656:无法分配给' AppendText'因为它是一个'方法组'

可以使用Text代替AppendText来解决:

textBox1.Text = str;

错误,

  

错误CS0149:预期的方法名称

可以通过

来解决
textBox1.Dispatcher.BeginInvoke(DispatcherPriority.Normal, 
                                new Action(() => UpdateText(e.Data)),
                                DispatcherPriority.Normal);

您不需要声明新的委托类型。