我正在尝试使用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:预期的方法名称
我怎样才能让它发挥作用? 感谢
答案 0 :(得分:4)
Dispatcher.BeginInvoke与Dispatcher
所关联的线程上指定的参数数组异步执行指定的委托。你这样做是错误的。试试这个
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);
您不需要声明新的委托类型。