bekerja dengan utas dan port serial dan panggilan DB

Saya mencoba membaca data dari port serial, menampilkan data di beberapa kontrol, dan memasukkan data ke dalam DB.

Saya sudah memasukkannya ke dalam DB dan membacanya dengan benar, namun, itu tidak lagi menulis ke kotak teks sejak saya menambahkan perubahan DB. Bagaimana saya bisa menyelesaikan ketiga tugas ini secara bersamaan. Berikut ini adalah beberapa kode saya.

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

    }

Terima kasih sebelumnya.


person Eric    schedule 16.08.2011    source sumber


Jawaban (1)


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

Anda mengeksekusi kode dengan efek samping pada thread Dispatcher - membaca dari port serial pada thread Dispatcher/UI mungkin tidak sehat - sebaliknya yang mungkin Anda maksudkan lakukan adalah menggunakan variabel string sebagai penutup dan menampilkan isinya:

Invoke(new Action(() => richTextBox1.AppendText(force)));
person BrokenGlass    schedule 16.08.2011
comment
Saya baru dalam bekerja dengan thread. Kapan saya harus melakukan tindakan baru dan seberapa sering? - person Eric; 16.08.2011
comment
@Eric: Itu sangat tergantung pada aplikasi Anda dan apa yang Anda coba lakukan - hal utama adalah memahami thread mana dan kapan Action dieksekusi - dan ketika mengandalkan variabel bagaimana penutupan bekerja dalam konteks ini. - person BrokenGlass; 16.08.2011