datarecievedベースのイベントハンドラを実装しようとしていますが、ポートからデータを受け取ることはできますが、イベントを実行するのが難しいと思います。私はReadLineとReadExistingの両方を試しました。私はシリアル通信で多くの作業を行っている、と私はそれがしたいようDataReceived
が働くことがないおかげで、datareceivedイベントハンドラをシリアルC#
private void Form1_Load(object sender, EventArgs e)
{
// graphing stuff
portname = "COM1";
parity = Parity.None;
BaudRate = 115200;
stopbits = StopBits.One;
databits = 8;
port = new System.IO.Ports.SerialPort(portname);
port.Parity = parity;
port.BaudRate = BaudRate;
port.StopBits = stopbits;
port.DataBits = databits;
port.DataReceived += new SerialDataReceivedEventHandler(port_DataReceived);
port.Open();
count = 0;
}
void port_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
try
{
line = port.ReadLine();
count++;
this.BeginInvoke(new LineReceivedEvent(LineReceived),line);
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
private delegate void LineReceivedEvent(string text);
private void LineReceived(string text)
{
if (zedGraphControl1.GraphPane.CurveList.Count <= 0)
return;
LineItem curve = zedGraphControl1.GraphPane.CurveList[0] as LineItem;
if (curve == null)
return;
IPointListEdit list = curve.Points as IPointListEdit;
double value = double.Parse(text);
list.Add(count, value);
// graphing stuff
}
// graphing stuff
}
ボーレートを低く抑えてください。一度に1つの番号を呼び出しています。これは、UIスレッドがペイントを停止させる原因となる多くの呼び出しです。あなたのユーザーは1秒間に約20回のアップデートしか見ることができません。問題を解決するためのバッファ。 –