2016-12-05 96 views
-3

好evenig,使用C#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超级。

我还会创建一个额外的函数来从串口读取和返回数据。在我的理解中,它不会改变代码的运行方式,除了看起来更短。

我的程序中的这部分内容仅用于一次开始校准,并没有经常使用,但如果出现类似的情况,比如“直到发生特定事件才执行事件A”,应该稍后需要,并且出于兴趣对于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

哦,好的,谢谢你的信息,不好看看你的两个提示。我应该删除这个问题,如果它不适合这个plattform吗?这里很新,不想让任何人感到沮丧=) –

+0

@ChristophPoser http://codereview.stackexchange.com可能更适合这类问题 – Georg