работа с потоками и последовательными портами и вызовами БД - PullRequest
1 голос
/ 16 августа 2011

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

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

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 Ответ

1 голос
/ 16 августа 2011
Invoke(new Action(() => richTextBox1.AppendText(serialPort1.ReadExisting())));

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

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