私は現在、Visual Studios 2010 c#のSerialPortライブラリを使用してカスタムメイドの PCB からデータを読み取るプロジェクトに取り組んでいます。
現在、ボタンをクリックしてデバイスからデータのバイトとして与えられた特定のタイプのデータを読み取ろうとしています。デバイスからの応答がない場合は、5 秒待ってからタイムアウトします。
ただし、何らかの理由でタイマーに問題があり、多くの場合、5 秒が経過する前に時間切れになり、有効なデータが保存されなくなります。以下は使用したコードです。誰かが私の欠陥を指摘できますか? 私が使用しているSystem.Windows.Forms.Timerのイベント タイマー関数が間違っていると思われます。
ボタンクリック
bool flag = false;
private void btnGetData_Click(object sender, EventArgs e)
{
string command = "*data#";//make string command to send
sendCommand(command);
flag = true;
gui.Timer.Interval = timerlength;
gui.Timer.Enabled = true;
gui.Timer.Tick += new EventHandler(Timer_Tick);
}
タイマー イベント ハンドラ
private void readVarsTimer_Tick(object sender, EventArgs e)
{
if (flag == true)
{
flag = false;//set flag low
print("Data Timer Expired, Run Command Again.");
gui.Timer.Stop();//stop timer
gui.Timer.Enabled = false; //event over
timerlength = 5000;//reset timer
}
}
シリアル ポートがデータを読み込んでいます。タイマーを使用しない送信または受信データは正常に機能するため、シリアル ポートの設定が正しいと想定してください。
if (flag == true)
{
//code to read data in, and parse to display in text boxes correct
flag = false;
}
その他の重要な注意事項:
デバイスから期待できる 3 種類のデータがあるので、対応するボタンでフラグを設定して if/else を使用します。したがって、「フラグ」変数のグローバル宣言です。
シリアルポートがゴミ箱データを取得するという問題を検出したことはありません。データを実行して分析し、正しい期待データを取得できることを確認しました。
このタイマーは、デバイスがオフのときも問題なく、5 秒間経過してから期限切れになります。