3

私は、Arduino のセンサーからシリアル データを CSV 形式で読み取り、C# を使用して取得した値を解析し、リアルタイム グラフを表示する必要があるプロジェクトの最中です。

私はマルチスレッドの概念に不慣れで、作成するスレッドの数と、各スレッドにどのタスクを割り当てる必要があるかについて混乱しています。

助言がありますか?これは初期のサンプル コードなので、エラーがある可能性があります。

 private void serialPort1_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
    {
        RxString = serialPort1.ReadExisting();
        RxString = RxString.Replace("$", "");
        this.Invoke(new EventHandler(DisplayText));

    }
    //display the parsed string List
    private void DisplayText(object sender, EventArgs e)
    {

        richTextBox1.AppendText(RxString);
        GlobalList.AddRange(parsed());
        richTextBox2.Text = String.Join(Environment.NewLine, GlobalList);
    }
    //set the input rate
    private void Start_Click(object sender, EventArgs e)
    {
        serialPort1.PortName = "COM32";
        serialPort1.BaudRate = 9600;
        serialPort1.DtrEnable=true;
        serialPort1.Open();
        if (serialPort1.IsOpen)
        {
            Start.Enabled = false;
            Stop.Enabled = true;
            richTextBox1.ReadOnly = false;

        }

    }
 public List<String> parsed()
    {
                string line;
                int loc = 0;
                List<string> stringList;
                line = richTextBox1.Text;
                stringList = new List<string>(line.Split(','));
                richTextBox3.AppendText("\n Pressure:" + stringList[loc]);
                loc++;
                richTextBox3.AppendText("\n Accelerometer:" + stringList[loc]);
                loc++;
                richTextBox3.AppendText("\n Temperature:" + stringList[loc]);
                loc++;
                richTextBox3.AppendText("\n Height:" + stringList[loc]);
                loc++;


            return stringList;
    }

//plot an elementary graph from the values obtained
public void displayglobal()
    {

        for (int i = 0; i < GlobalList.Count; i++)
        {
            if (i % 3 == 0)
            {
                rtxtConsole.AppendText("\nPressure: " + GlobalList[i]);
                chart1.Series["tempvspressure"].Points.AddXY(GlobalList[i], GlobalList[i + 2]);
            }


        }
    }
4

2 に答える 2

0

C#の新しいasyncサポートにより、複数のスレッドはまったく必要ありません。

port.BaseStream.ReadAsync()UI メッセージ処理と連携するものを使用できます。

于 2014-08-29T04:38:53.747 に答える