2011-08-16 4 views
1

シリアルポートからデータを読み込み、何らかのコントロールにデータを表示し、そのデータをDBに挿入しようとしています。スレッドとシリアルポートとDBコールを操作する

DBに挿入して正しく読み込んでいますが、DBの変更を追加してからもうテキストボックスに書き込んでいません。どのようにしてこれらの3つのタスクを同時に達成できますか?以下は私のコードの一部です。

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

関連する問題