用流程输出更新文本框

本文关键字:更新 文本 输出 程输出 | 更新日期: 2023-09-27 18:02:11

我正在尝试用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:方法名称期望

我怎样才能使它工作?由于

用流程输出更新文本框

Dispatcher。BeginInvoke在与Dispatcher相关联的线程上异步执行指定的委托和指定的参数数组。你做这件事的方法不对。试试这个

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

AppendText是一个方法,这就是你得到错误的原因。如果你想给字符串赋值,你应该这样做:

textBox1.Text = str;

:

textBox1.AppendText(str);

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

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

可以用Text代替AppendText来解析:

textBox1.Text = str;
误差

错误CS0149:方法名称期望

可以用

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

你不需要声明新的委托类型