Geo*_*Ego 1 .net c# arrays multithreading
尝试将一个字节数组的一部分分配给两个单独的字节数组时,我有一些奇怪的行为,作为串行命令在不同的串行端口上发送出去.我已经打破了代码,以便能够更轻松地完成它; 问题很容易重复,但对我来说毫无意义.
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];
Run Code Online (Sandbox Code Playgroud)
您可以看到我正在使用几个整数参数,将它们转换为字节数组,然后将它们放入我构建的命令模板中的特定位置.如果我这样做,而不在中间睡至少100ms,内容cmd1和cmd2将是相同的每一次- [3]和[4]两个cmd1和cmd2将包含数据parameterBytesCmd1[0]和[1].
FWIW,这发生在一个单独的线程上.
你的问题可能来自
byte[] cmd1 = CLEAR_COMMAND;
byte[] cmd2 = CLEAR_COMMAND;
Run Code Online (Sandbox Code Playgroud)
您正在复制命名阵列CLEAR_COMMAND既cmd1与cmd2和修改其内容.您需要复制数组并将其分配给变量,因此cmd1和cmd2不会修改原始记录,也不会相互交互.
如果using System.Linq;在文件顶部添加a ,则应该能够执行以下操作来生成数组的浅表副本.根据您是否希望cmd1和cmd2指向内存中的同一阵列,您可以执行任一操作
byte[] cmd1 = CLEAR_COMMAND.ToArray();
byte[] cmd2 = CLEAR_COMMAND.ToArray();
Run Code Online (Sandbox Code Playgroud)
要么
byte[] cmd1 = CLEAR_COMMAND.ToArray();
byte[] cmd2 = cmd1;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
47 次 |
| 最近记录: |