2016-05-17 11 views
2

この質問は意味がない場合は申し訳ありません。私はc#でGUIを作成して、コントローラとの間でデータを送受信します。私は非常に奇妙な宮殿で立ち往生した。私はコントローラにデータを送信してコントローラが私に確認を返すべきだとしましょう。私は承認を取り扱っています。私の質問は、私はコントローラから何も得られなかった場合、私はエラーを発生させたいデータを送信した後です。特定の時間間隔でシリアルポートからデータを受信しました。#

+0

それはあなたのコードに多くを依存していますが、偽の応答を=設定することができます。指定されたタイムアウトの後に、タイマーを起動します。応答がまだfalseの場合は、例外を発生させます。 – BugFinder

+0

私は、データを取得するport_receiveイベントを持っています。どのようにtimer_click –

答えて

2

port_receiveイベントで、 "dataReceived"フラグをtrueに設定します。 timer.Elapsedイベントハンドラで、この値がfalseの場合、データは時間内に受信されず、エラーがスローされます。以下の例は、同様のことを示しています。DataReceivedメソッドは、port_receiveメソッドを表しています。タイマー間隔と遅延で遊んで、データが時間内に受信された場合、エラーメッセージが表示されないことを確認できます。

using System; 
using System.Threading.Tasks; 
using System.Timers; 

namespace ConsoleApplication7 
{ 
class Program 
{ 
    static bool dataNotReceived = true; 
    static readonly Timer timer = new Timer {Interval = 1000}; 

    static void Main(string[] args) 
    { 
     timer.Elapsed += (sender, eventArgs) => 
     { 
      if (dataNotReceived) 
      { 
       Console.WriteLine("Data not received, error thrown..."); 
       throw new Exception(); 
      } 
     }; 

     timer.Start(); 

     DataReceived(); 

     Console.ReadLine(); 
    } 

    static async Task DataReceived() 
    { 
     await Task.Delay(2000); 
     Console.WriteLine("Data received in time"); 
     dataNotReceived = false; 
     timer.Stop(); 
    } 
} 

}

1

は今、あなたは答えを待っていることでTimeoutExceptionを得ることができ、この

SerialPort Port = new SerialPort() 
//Define baudrate and so on 
Port.ReadTimeout = 1000; 

ようSERIALPORTのReadTimeoutを使用してください。

Port.Write(Request); 
try 
{ 
    //waiting for an answer 
    Port.ReadByte(); 
} 
catch (TimeoutException) 
{ 
    //No answer until timeout 
} 
関連する問題