2016-10-17 28 views
1

当我尝试将一个字节数组的一部分分配给两个单独的字节数组,并将它们作为单独的串行端口上的串行命令发出时,我有一些奇怪的行为。我已经打破了代码,以便能够更轻松地通过它;这个问题很容易重复,但对我来说毫无意义。字节分配不一致

byte[] cmd1 = CLEAR_COMMAND; 
byte[] cmd2 = CLEAR_COMMAND; 

byte[] parameterBytesCmd1 = IntToByteArray(parameter1); 
cmd1[3] = parameterBytesCmd1 [0]; 
cmd1[4] = parameterBytesCmd1 [1]; 

Thread.Sleep (100); 

byte[] parameterBytesCmd2 = IntToByteArray(parameter2); 
cmd2[3] = parameterBytesCmd2 [0]; 
cmd2[4] = parameterBytesCmd2 [1]; 

你可以看到我走了几个整数参数,将它们转换成字节数组,然后将它们放入特定位置在我建立的命令模板。如果我在没有睡眠至少100ms的情况下进行此操作,则cmd1cmd2的内容每次都会相同 - [3][4]对于cmd1cmd2都将包含来自parameterBytesCmd1[0][1]的数据。

FWIW,这发生在一个单独的线程。

回答

5

你的问题可能来自

byte[] cmd1 = CLEAR_COMMAND; 
byte[] cmd2 = CLEAR_COMMAND; 

您复制命名CLEAR_COMMANDcmd1cmd2和修改其内容的数组。您需要复制数组并将其分配给变量,以便cmd1和cmd2不会修改原始记录,也不会相互交互。

如果您将using System.Linq;添加到文件的顶部,您应该可以执行以下操作来制作阵列的浅表副本。根据如果你想CMD1和CMD2在内存中的同一阵列指向你会想要做任何

byte[] cmd1 = CLEAR_COMMAND.ToArray(); 
byte[] cmd2 = CLEAR_COMMAND.ToArray(); 

byte[] cmd1 = CLEAR_COMMAND.ToArray(); 
byte[] cmd2 = cmd1; 
相关问题