У меня есть следующий код, и я хотел бы разделить входящие последовательные данные на части и отобразить отдельные части в отдельных текстовых полях. Входящие последовательные данные
angle1:angle2:value1:value2:value3:value4
куда
angle1
имеет значения от -90 до 90angle2
находится в диапазоне от 0 до 90value1
value2
value3
value4
от 0 до 1024
Поэтому я хотел бы отображать каждый из них в разных текстовых полях.
Это то, что у меня есть до сих пор, которое отображает всю входящую строку в одном текстовом поле.
Любая помощь, идея и совет высоко ценятся, так как я новичок в С#.
namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
public static System.IO.Ports.SerialPort port;
delegate void SetTextCallback(string text);
private BackgroundWorker hardWorker;
private Thread readThread = null;
public Form1()
{
InitializeComponent();
hardWorker = new BackgroundWorker();
string[] ports = SerialPort.GetPortNames();
comboBox1.Items.AddRange(ports);
}
private void Form1_Load(object sender, EventArgs e) {}
private void SetText(string text)
{
if (this.receiveText.InvokeRequired)
{
SetTextCallback d = new SetTextCallback(SetText);
this.Invoke(d, new object[] { text });
}
else
{
//this.receiveText.Text += "";
this.receiveText.Text += text;
this.receiveText.Text += Environment.NewLine;
}
}
public void Read()
{
while (serialPort2.IsOpen)
{
try{
if (serialPort2.BytesToRead > 0)
{
Thread.Sleep(1000);
string message = serialPort2.ReadLine();
this.SetText(message);
}
}
catch (TimeoutException) { }
}
}
private void start_Click(object sender, EventArgs e)
{
System.ComponentModel.IContainer components = new System.ComponentModel.Container();
if (comboBox1.SelectedIndex > -1)
{
string port = (string)comboBox1.SelectedItem;
serialPort2.PortName = port;
serialPort2.BaudRate = 9600;
serialPort2.DtrEnable = true;
serialPort2.ReadTimeout = 1000;
serialPort2.WriteTimeout = 500;
serialPort2.Open();
readThread = new Thread(new ThreadStart(this.Read));
readThread.Start();
this.hardWorker.RunWorkerAsync();
}
}
private void receiveText_TextChanged(object sender, EventArgs e)
{
receiveText.SelectionStart = receiveText.Text.Length;
receiveText.ScrollToCaret();
receiveText.Refresh();
}
}
}
РЕШЕНО путем изменения следующего:
private void SetText(string text)
{
if (this.receiveText.InvokeRequired)
{
SetTextCallback d = new SetTextCallback(SetText);
this.Invoke(d, new object[] { text });
}
else
{
string[] newData = text.Split(':');
boxLR.Text = newData[0];
boxUD.Text = newData[1];
boxldrright.Text = newData[2];
boxldrleft.Text = newData[3];
boxldrup.Text = newData[4];
boxldrdown.Text = newData[5];
}
}
Спасибо всем за вашу помощь.