2

バックグラウンドワーカーを使ったシリアルポートからの読み込みデータについてお聞きしたいです。1 つのワーカーを使用して 1 つまたは複数のシリアル ポートからデータを取得することは可能ですか? ワーカーでシリアル ポートを 1 つだけ使用すると、データを取得できます。2 つ以上のポートを使用すると、データを取得できなくなります (エラー メッセージなし)。これが私のコードです:

  private void worker_DoWork(object sender, DoWorkEventArgs e)
  {
        String p = "";
        String s = "";
        Int32 b = 0;
        MethodInvoker get_selectedPort = new MethodInvoker(() =>
            {
                p = comboBoxPressure.SelectedItem.ToString();
                s = comboBoxStrain.SelectedItem.ToString();
                b = Convert.ToInt32(comboBoxBaudrate.SelectedItem.ToString());
            });
        this.Invoke(get_selectedPort);

        SerialPort portPressure = new SerialPort();  // serial port 1
        portPressure.PortName = p;
        portPressure.BaudRate = b;
        portPressure.Parity = Parity.None;
        portPressure.StopBits = StopBits.One;
        portPressure.DataBits = 8;
        portPressure.Handshake = Handshake.None;

        SerialPort portStrain = new SerialPort(); // serial port 2
        portStrain.PortName = s;
        portStrain.BaudRate = b;
        portStrain.Parity = Parity.None;
        portStrain.StopBits = StopBits.One;
        portStrain.DataBits = 8;
        portStrain.Handshake = Handshake.None;

        try
        {
            portPressure.Open();
            portStrain.Open();
        }
        catch (Exception error)
        {
            MessageBox.Show("Error while trying open serial port!\r\n" + error.Message, "COM Port Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
            worker.CancelAsync();
            return;
        }

        while (!worker.CancellationPending)
        {               
            System.Threading.Thread.Sleep(100);
            this.dataPressure = portPressure.ReadExisting();
            this.dataStrain = portStrain.ReadExisting();
            BeginInvoke((Action)(() => updateData()));
        }

        portPressure.Close();
        portStrain.Close();
    }

}
4

0 に答える 0