2011-08-16 37 views
1

我试图从串口读取数据,在某些控件中显示数据,并将数据插入数据库。使用线程和串行端口和数据库调用

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

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
Invoke(new Action(() => richTextBox1.AppendText(serialPort1.ReadExisting()))); 

您与调度线程上的副作用执行代码 - 从调度程序/ UI线程上的串口读取可能不是健康的 - 而不是你可能意味着做的是使用字符串变量关闭并显示其内容:

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

啊,谢谢。这正是我的问题所在。 – Eric

+0

我是新来的线程工作。我应该什么时候调用新操作以及多久? – Eric

+1

@Eric:很大程度上取决于你的应用程序以及你正在尝试做什么 - 最主要的是理解在哪个线程上以及什么时候“Action”被执行 - 以及何时依赖变量在这种情况下闭包如何工作。 – BrokenGlass