0

我正在尝试avrdude在 Visual Studio 2010 中的 C# 应用程序中运行,并将其输出放在RichTextox.下面是我的代码:-

void proc_OutputDataReceived(object sender, DataReceivedEventArgs e)
        {
            if (e.Data != null)
            {
                string newLine = e.Data.Trim() + Environment.NewLine;
                MethodInvoker append = () => txtOutput.Text += newLine;
                txtOutput.BeginInvoke(append);
            }

        }
        private void btnAVRDUSR_Click(object sender, EventArgs e)
        {
            string command = "/c avrdude";

            ProcessStartInfo procStartInfo = new ProcessStartInfo("CMD", command);

            Process proc = new Process();
            proc.StartInfo = procStartInfo;
            proc.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
            proc.Start();
            procStartInfo.CreateNoWindow = true;
            procStartInfo.WindowStyle = ProcessWindowStyle.Hidden;
            procStartInfo.RedirectStandardOutput = true;
            procStartInfo.UseShellExecute = false;
            proc.OutputDataReceived += new DataReceivedEventHandler(proc_OutputDataReceived);
            proc.Start();

            proc.BeginOutputReadLine();
            procStartInfo.CreateNoWindow = true;
            procStartInfo.WindowStyle = ProcessWindowStyle.Hidden;
        }

这个,代码没有显示任何东西RichTextBox。现在我决定使用 pin 命令。所以,我替换这条线

string command = "/c avrdude ";

这样

string command = "/c ping 192.168.1.1";

这次我的代码很棒。那么,任何人都可以告诉我为什么我avrdude不在此代码中工作。

4

1 回答 1

0

将 avrdude 添加到路径系统变量。请注意,avrdude 将其数据输出到 stderr 而不是 stdout。在命令提示符窗口中,两者都对用户可见,但在您的代码中,您正在重定向 OutputData。要重定向标准错误,请改用 ErrorData:

process.StartInfo.RedirectStandardError = true;
process.StartInfo.UseShellExecute = false;
process.ErrorDataReceived += Process_ErrorDataReceived;
process.StartInfo.FileName = "CMD.exe";
process.StartInfo.Arguments = AVRdudeCmd;
process.Start();
process.BeginErrorReadLine();

在您的 ErrorDataReceived 函数中,您可以使用上面复制的相同代码。

于 2017-09-04T08:54:35.270 回答