如何在c# windows窗体应用visual studio 2010中运行AVRDUDE

本文关键字:2010 studio 运行 AVRDUDE visual 应用 windows 窗体 | 更新日期: 2023-09-27 18:02:13

我试图在visual studio 2010中的c#应用程序中运行avrdude,并将其输出在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中没有显示任何东西。现在我决定使用引脚命令。因此,我替换这一行

string command = "/c avrdude ";
由这个

string command = "/c ping 192.168.1.1";
这一次我的代码工作得很好。所以,有人能告诉我为什么我的avrdude在这个代码中不工作吗?

如何在c# windows窗体应用visual studio 2010中运行AVRDUDE

将avrdude添加到path系统变量中。注意,avrdude将其数据输出到标准输出,而不是标准输出。在命令提示符窗口中,两者对用户都是可见的,但是在您的代码中,您要重定向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函数中,可以使用上面复制的代码。