e-tipsmemo

ごった煮

Uart受信 Form Closing 停止する。

UARTの受信スレッドからUIスレッドの内容を変更する方法として、
以下のようなコードを書いた。

private void DataReceived(object sender, SerialDataReceivedEventArgs e)
{
        //受信処理
    ...
       this.Invoke(new MethodInvoker(() => { /*UIスレッドでなんかする*/addValuetoGraph(); }));
}

が、これだと接続したままでFormのClosingイベント内でSerialをCloseすると、
プログラムが停止する。

private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
    if (serialPort1.IsOpen == true)
    {
        serialPort1.Close();
        comboBox1.Enabled = true;
        button1.Enabled = true;
    }
}

解決策
受信スレッドのInvokeをBeginInvokeにする。

//brfore
this.Invoke(new MethodInvoker(() => { addValuetoGraph(); }));

//after
this.BeginInvoke(new MethodInvoker(() => { addValuetoGraph(); }));