シリアルポートからバイトを読み取り、テキストボックスに文字列として書き込もうとしています。
私の問題は、コードが1つの長い文字列ではなく、各文字/文字をボックスに個別に書き込むことです.
public partial class Form1 : Form
{
static SerialPort serial;
public string line;
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
inputBox.Text = "Enter some text, then press enter";
serial = new SerialPort("COM3", 9600, Parity.None, 8, StopBits.One);
serial.Open();
serial.DataReceived += new SerialDataReceivedEventHandler(serial_DataReceived);
}
public void serial_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
// wait for the buffer
System.Threading.Thread.Sleep(300);
byte[] bytes = new byte[serial.BytesToRead];
serial.Read(bytes, 0, bytes.Length);
line = System.Text.Encoding.UTF8.GetString(bytes);
if (line != null)
{
writeRecieved(line);
}
}
public void writeRecieved (string line)
{
if (outputBox.InvokeRequired)
{
outputBox.Invoke((MethodInvoker)delegate { outputBox.Text = line; });
}
else
{
outputBox.Text = line;
}
}
ただし、デバッグ時には、これらの各行に 1 回しかヒットしないように見え、ローカル ビューでは変数行が「Hello」と表示されます。
編集: 追加 (outputBox.Text += 行;) を試みましたが、新しいメッセージを受信するたびにテキストボックスがテキストでいっぱいになります。outputBox. Clear(); を入れてみました。datarecieved ハンドラーで、ただし、何らかの理由で各バイトの後にこれを行います