0

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。ここで、pin コマンドを使用することにしました。だから、私はこの行を置き換えます

string command = "/c avrdude ";

これで

string command = "/c ping 192.168.1.1";

今回は私のコードがうまくいきます。では、なぜ myavrdudeがこのコードで機能しないのか教えてください。

4

1 に答える 1

0

パス システム変数に avrdude を追加します。avrdude はそのデータを stdout ではなく stderr に出力することに注意してください。コマンド プロンプト ウィンドウでは、どちらもユーザーに表示されますが、コードでは OutputData をリダイレクトしています。stderr をリダイレクトするには、代わりに 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 に答える