2012-04-21 9 views
0

user (pouzivatel)int(stav odberu)のようなデータをシリアルポートでリンクモデム経由でロードしてローカルデータベースに格納する必要があります。データをロードし、シリアルポート経由でデータを送信する方法はわかっていますが、イメージ上の構造内でデータを生成する必要があります。 C#自分のプロトコルを使用している2台のPC間でシリアルポート経由でデータを送信

evisualisation

は、まず私は、ところでこれが動作しているATコマンドを使用して、デバイスの電話番号をダイヤルし、私は停止し、 SOH+adresa objektu(SOH +アドレスに関するいくつかの文字列)を待つか、今はわかりません。確認(ACK)に関するデータを送信し、新しいデータが来るのを待ちます。

待機シーケンスが私の最大の問題です。データの受信を停止して待機するにはどうすればよいですか。

+1

さて、ブロッキング読み取り呼び出しを行うか、データrxのイベントを発生させるラッパーコンポーネントを使用してください。既定では、C#Toolboxにはシリアルコンポーネントがあります。それは確かに 'DataReceived'イベントを持っていて、おそらくスレッドで呼び出すことができるメソッドをブロックしています。 –

+0

または、単にDataReceivedイベントを待って使用しないでください。 –

+0

C#には私が使用するシリアルコンポーネントがあります。私はポート上でデータを読み込み、テキストボックスに表示することは簡単ですが、上記の画像をどのようにプログラムするのか分かりません。私はデータ受信ハンドラを使用します プライベート静的void DataReceivedHandler( オブジェクト送信者、 SerialDataReceivedEventArgs e) { SerialPort sp =(SerialPort)送信者; 文字列indata = sp.ReadExisting(); Console.WriteLine( "Data Received:"); Console.Write(indata); } – MichalCh

答えて

0

コンポーネントを使用し、コメントで示唆されているようにDataReceivedイベントを使用すると、問題が簡単かつ効果的に解決される可能性があります。しかし、あなたは自分でそれを行うためにもっと低レベルのものを探していたかもしれません。

WinFormsのようないくつかのメッセージキューベースの環境にあると思われる空想的なイベントベースのシステムなしでインラインで実行したい場合、このようなことを行うことができます。

while (true) 
{ 
    // check for new data 
    ... 
    // if you got some, respond to it 
    ... 

    if (someConditionThatTellsYouYouAreDoneOrSupposedToTerminate) break; 

    System.Threading.Thread.Sleep(50); 
} 
関連する問題