使用线程和串行端口以及数据库调用

时间:2011-08-16 18:27:25

标签: c# .net visual-studio multithreading serial-port

我正在尝试从串口读取数据,在某些控件中显示数据,然后将数据插入到数据库中。

我已经将它插入数据库并且正确读取,但是,由于我添加了数据库更改,因此它不再写入文本框。我怎样才能同时完成这三项任务。以下是我的一些代码。

void serialPort1_DataReceived(object sender, SerialDataReceivedEventArgs e)
    {
        string force = "";
        force = serialPort1.ReadExisting().Split('.')[0].ToString();

        Invoke(new Action(() => richTextBox1.AppendText(serialPort1.ReadExisting())));


        string queryString = "Insert into Table....";


        OdbcConnection connection = new OdbcConnection();
        connection.ConnectionString = Settings.Default.STIMConnection;
        OdbcCommand command = new OdbcCommand(queryString, connection);

        command.CommandType = CommandType.Text;
        try
        {
            connection.Open();
            command.ExecuteNonQuery();
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.ToString());
        }
        finally
        {
            connection.Close();
            connection.Dispose();
        }

    }

提前谢谢。

1 个答案:

答案 0 :(得分:1)

Invoke(new Action(() => richTextBox1.AppendText(serialPort1.ReadExisting())));

您在Dispatcher线程上执行带有副作用的代码 - 从Dispatcher / UI线程上的串行端口读取可能不健康 - 而您可能意味着要做的是使用字符串变量作为一个闭包并显示其内容:

Invoke(new Action(() => richTextBox1.AppendText(force)));