C# 使用进程输出更新文本框

C# 使用进程输出更新文本框,c#,wpf,batch-file,C#,Wpf,Batch File,我试图用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; p

我试图用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();
}
点击一个按钮,我运行我的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();
}

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

我犯了一个错误

错误CS1656:无法分配给“AppendText”,因为它是“方法” 集团的


错误CS0149:应为方法名称

我怎样才能让它工作?
谢谢

AppendText是一种方法,这就是为什么会出现错误的原因。如果要分配字符串,应执行以下操作:

textBox1.Text = str;
如果要附加它,请执行以下操作:

textBox1.AppendText(str);
在与
调度程序关联的线程上,使用指定的参数数组异步执行指定的委托。你做这件事的方式不对。试试这个

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

您尝试在dispatcher上调用方法的方式是错误的。在处理
WPF
之前,您需要投入更多精力学习
C
基础知识。尽管如此,这个错误

错误CS1656:无法分配给“AppendText”,因为它是“方法组”

可以使用
Text
而不是
AppendText
来解决:

textBox1.Text = str;
错误


错误CS0149:应为方法名称

可以通过以下方式解决:

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

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

谢谢@javi,在Dispatcher中。需要BeginInvoke()方法名。您不打算加载辅助命令处理器吗?您希望捕获什么输出?我只是想在我的文本框中获取批处理文件的输出。@Garry,请建议如何在文本框中获取批处理文件的输出。许多人会使用/c加载辅助命令处理器。但如果成功了,一切都会好的。你修了什么?您能解释一下吗?错误CS0149:需要方法名。我已经修复了出现在OP question
textBox1.Dispatcher.BeginInvoke(DispatcherPriority.Normal,new SetText(UpdateText(e.Data))这一行的错误谢谢,它看起来像是一个只有代码的答案,没有任何解释。@GarryVass我已经更新了我的答案。谢谢你通知我。这是我的错。看来改进后的答案吸引了更多的选票。做得好!
textBox1.Dispatcher.BeginInvoke(DispatcherPriority.Normal, 
                                new Action(() => UpdateText(e.Data)),
                                DispatcherPriority.Normal);