タイマとC#のシリアルポート?

私はそれからデータを読み取るためにRFIDデバイスを使用しています。データを受信した後、Visual Studio 2008で使用しています。シリアルポートとタイマーのデータ受信イベントを使用してデータを取得します。

問題は、RFIDデータを取得し、データ受信イベントのテキストフィールドに入力しようとするときです。

タイマーが継続的にデータをチェックしているため、継続的にデータを取得し、これをテキストボックスに入れます。だから私のバックエンドクエリは常に実行され、同じデータを連続して挿入しています。私は、タイマーとシリアルポートを停止して、フォームを閉じて開いていない状態で、もう一度シリアルを開きたいと思っています。シリアルポートからタイマ以外のデータを取得する方法はありますか?データを取得したら、それを停止します。

ここに私のコードです:

private void serialPort_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e) 
{ 
    //Serialtimer.Start(); 
    if (sp.IsOpen) 
    { 
        data = sp.ReadExisting(); 
        RFIDtB.Text = data; 
    } 
    else 
    { 
        MessageBox.Show("Please Check the device"); 
    } 
}
0
どのような巨大な文章の問題:)あなたは DataReceived イベントと Close メソッドを使用するだけですか?なぜタイマーが必要ですか?いくつかのコードを表示してください
追加された 著者 Reniuz,
次回は質問を編集し、コメントにはコードを入れないでください。また、私はここで任意のタイマーを見ることができません。
追加された 著者 Reniuz,
私はすでに書いています - 質問を編集し、そこにコードを書いてください!
追加された 著者 Reniuz,
プライベートvoid serialPort_DataReceived(オブジェクト送信者、System.IO.Ports.SerialDataReceivedEventArgs e){//Serialtimer.Start(); if(sp.IsOpen){データ= sp.ReadExisting(); RFIDtB.Text =データ; } else {MessageBox.Show( "デバイスを確認してください"); }}
追加された 著者 user1065075,
クロススレッド操作が無効です:作成されたスレッド以外のスレッドからアクセスされた 'RFIDtB'を制御します。このようなエラーが出る
追加された 著者 user1065075,
プライベートvoid Serialtimer_Tick(オブジェクト送信者、EventArgs e){RFIDtB.Text = data; }
追加された 著者 user1065075,
ここにタイマーがあります
追加された 著者 user1065075,
それは働いていないthats!
追加された 著者 user1065075,

1 答え

UIスレッド以外のスレッドからフォームコントロールにアクセスすることはできません。この記事を参照してください: http://msdn.microsoft.com/en-us/library /ms171728.aspx を参照してください。

0
追加された