0

c# (シリアル通信) を使用してデバイスからデータを送受信しています。私のセットアップを受け取るには、このようなものです。別のスレッドで受信しています。つまり、このようなものがあります

comPort.DataReceived += new SerialDataReceivedEventHandler(comPort_DataReceived);

private void comPort_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
    .....
}

書き込むには、デバイスにデータを書き込むボタンを押します。

データを受信するたびにボタンを押すのではなく、デバイスからデータを受信するたびに自動的にデータを書き込むことを考えていました。だから私のqはそれを comPort.WriteLine(textBox1.Text + "\r\n");本体に入れることができます

private void comPort_DataReceived(object sender, SerialDataReceivedEventArgs e)

関数。ここに書き込みを入れると動作しなくなるからです。それ以外の場合、上で述べたように、書き込みは別のボタンを押すことで機能します。

誰かが正しい方法を教えてもらえますか。スレッドまたは何かの問題はありますか

ありがとう !

4

1 に答える 1

0

UI コントロールを使用したすべての操作 ( のようなプロパティの読み取りと書き込みを含むText) は、アプリケーションのメイン スレッドで実行する必要があります。別のスレッドにいる場合は、Invokeメソッドを使用して操作を行う必要があります。

var text = (string)textBox1.Invoke(new Func<string>(() =>
    {
        return textBox1.Text;
    }));
comPort.WriteLine(text + "\r\n");

詳細については、この回答をお読みください。

于 2013-02-11T09:14:55.407 に答える