私はいくつかのArduinosを実行して制御するためにC#winformアプリケーションを作成しています。 Arduinosはオンザフライでプログラミングされているので、テストする必要があるものに応じて同じDuinoを使用して多くのタスクを実行できます。CMDウィンドウの出力をRichTextWindowにリダイレクト
オンザフライでのプログラミングは簡単ですが、下のコードを見てください。わかるように、私はAVRDudeと呼ばれる別のプログラムを実行し、パラメータを送信する必要があります。これはまだOKですが..... .....
AVRDudeはDOSなので、CMDウィンドウを開いてその出力を入れます。問題は、私のApps RichTextWindowにその出力が欲しいということです。私はいくつかの例を見つけて、それを理解しようとしていますが、私は明らかに私が助けを求めている重要な部分を見逃しています。
私はAVRDudeからの出力をリダイレクトしようとしていますが、空の文字列しかありません。何が私がそれを私のRichTextWindow AVRDude intからの出力をキャプチャすることができますが逃したことがあります。
私のコードは以下の通りです:
private void program_duino()
{
var choice = cbobx_device.SelectedIndex;
string partno = "";
string programmer = "";
string baudrate = "";
switch (choice)
{
case 0:
partno = "atmega2560";
programmer = "wiring";
baudrate = "115200";
break;
case 1:
partno = "m328p";
programmer = "arduino";
baudrate = "115200";
break;
default:
break;
}
using (Process sortProcess = new Process())
{
sortProcess.StartInfo.FileName = @"avrdude.exe";
sortProcess.StartInfo.Arguments = @"-Cavrdude.conf -p" + partno + " -c" + programmer + " -P" + cmbPortName.Text + " -b" + baudrate + " -D -Uflash:w:\"" + txtbx_hexfile.Text + "\":i -v";
sortProcess.StartInfo.CreateNoWindow = true;
sortProcess.StartInfo.UseShellExecute = false;
sortProcess.StartInfo.RedirectStandardOutput = true;
// Set event handler
sortProcess.OutputDataReceived += new DataReceivedEventHandler(SortOutputHandler);
// Start the process.
sortProcess.Start();
// Start the asynchronous read
sortProcess.BeginOutputReadLine();
sortProcess.WaitForExit();
}
}
void SortOutputHandler(object sender, DataReceivedEventArgs e)
{
Trace.WriteLine(e.Data);
this.BeginInvoke(new MethodInvoker(() =>
{
rchtxbx_output.AppendText(e.Data ?? string.Empty);
// Log(LogMsgType.Incoming, "\n" + (e.Data ?? string.Empty) + "\n");
}));
}