2016-12-05 5 views
-3

MS Visual Community 2015で使用すると、次の問題を実装するより良い方法はありますか?私は確信していますが、私はC#に新しいので、質問です。"イベントハンドリング"の効率

private void button6_Click(object sender, EventArgs e) 
    { 
     byte[] a = new byte[9]; // this is just command for motor 
     a[0] = 1;    // to start rotating 
     a[1] = 1;    // 
     a[2] = 0;    // 
     a[3] = 0;    // 
     a[4] = 0;    // 
     a[5] = 0;    // 
     a[6] = 0;    // 
     a[7] = 63;    // 
     a[8] = 65;    // 
     serialPort3.Write(a, 0, a.Length); 
     string b = serialPort2.ReadLine(); 
     decimal caliber = decimal.Parse(Regex.Split(b, "SR,00,002,")[1]); 
     decimal b1 = 0; 
     do 
     { 
      serialPort2.WriteLine("SR,00,002\r\n"); 
      string z = serialPort2.ReadLine(); 
      b1 = decimal.Parse(Regex.Split(z, "SR,00,002,")[1]); 
     } 
     while (b1 <= caliber); 
     byte[] c = new byte[9]; // this is command to stop rotating 
     c[0] = 1;    // 
     c[1] = 3;    // 
     c[2] = 0;    // 
     c[3] = 0;    // 
     c[4] = 0;    // 
     c[5] = 0;    // 
     c[6] = 0;    // 
     c[7] = 0;    // 
     c[8] = 04;    // 
     serialPort3.Write(c, 0, c.Length); 
    } 

私は余分な機能としてモータコマンドを持っていますが、これはテスト用です。私の目標は、SerialPortが値の変化を返すまでモータを回転させることです。 serialPort2はセンサで、デフォルト値は約-3500です(常にちょっと変わってしまいますので、私は口径として設定します)。モーターはセンサーを動かします。私は口径から値が変わるとすぐにモーターを停止させたい(そしてモーターポジションは保存される)。

私のコードは計画どおりに動作していますが、私のマシン上ではかなり速いですが、効率的な方法がシリアルポート2スーパーを頻繁にチェックする必要があるかどうかはわかりません。

また、シリアルポートからデータを読み込んで返すための特別な関数を作成します。私の理解では、コードを実行する方法は変更されませんが、見た目は短くなります。

私のプログラマーのこの部分は、1回のキャリブレーションにのみ使用され、あまり頻繁には使用されませんが、「特定のイベントが発生するまでイベントを実行する」のような類似のものは、 C#のやり方については、あなたの意見や助けに感謝します。

+0

['SerialPort.DataReceived event'](https://msdn.microsoft.com/en-us/library/system.io.ports.serialport.datareceived(v = vs.110))の使用を検討しましたか? aspx)? – stuartd

+0

@stuartdまだありません。前述したように、これまでC#はあまりおこなわれていませんでしたが、これを読んでいます。ありがとう –

+0

使用例については[シリアルポートポーリングとデータ処理](http://stackoverflow.com/questions/15124132/serial-port-polling-and-data-handling)を参照してください。 – stuartd

答えて

0

私はあなたのコードには二つの問題を参照してください。

  • Regex.Splitあなたはそれを呼び出すたびに、その間あなたはいつも同じパターンでそれを呼び出すパターンをコンパイルします。 Regex - 既にコンパイルされたパターンを保持するインスタンス
  • BitConverterを使用して、コマンドコードなどのバイナリ形式への変換を行い、コマンドコードに定数を割り当てることができます。これはコードをもっと読みやすくします。

また、スタックオーバーフローはコードレビュープラットフォームではありませんので、さらに具体的な質問をしてください。

+0

回答を投稿しないでください彼らの質問が適切でないことを誰かに伝えます。質問が適切な質問ではないと感じる場合は、*コメント*を投稿して、どのように承認され、適切な場合に投票/旗を掲げるかを説明してください。 – Servy

+0

オハイオ州オハイオ州、情報のおかげで、あなたの2つのヒントを悪い見てください。私はこのplattformに適していない場合、質問を削除する必要がありますか?まったく新しいここに、誰もが怒っている/怒らないようにしたくない) –

+0

@ChristophPoser http://codereview.stackexchange.comはこの種の質問にもっと適しているかもしれません – Georg