バックグラウンドワーカーを使ったシリアルポートからの読み込みデータについてお聞きしたいです。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();
}
}