работа с потоками и последовательными портами и вызовами БД

Я пытаюсь прочитать данные из последовательного порта, показать данные в каком-то элементе управления и вставить данные в БД.

У меня он вставляется в БД и читается правильно, однако он больше не пишет в текстовое поле, так как я добавил изменения БД. Как я могу выполнить эти три задачи одновременно. Ниже приведен некоторый мой код.

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();
        }

    }

Заранее спасибо.


person Eric    schedule 16.08.2011    source источник


Ответы (1)


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

Вы выполняете код с побочными эффектами в потоке Dispatcher — чтение из последовательного порта в потоке Dispatcher/UI, вероятно, не является здоровым — вместо этого вы, вероятно, имели в виду использование строковой переменной в качестве замыкания и отобразить его содержимое:

Invoke(new Action(() => richTextBox1.AppendText(force)));
person BrokenGlass    schedule 16.08.2011
comment
Я новичок в работе с потоками. Когда я должен вызывать новые действия и как часто? - person Eric; 16.08.2011
comment
@Eric: Это во многом зависит от вашего приложения и того, что вы пытаетесь сделать - главное понять, в каком потоке и когда выполняется Action - и, полагаясь на переменные, как замыкания работают в этом контексте. - person BrokenGlass; 16.08.2011