尝试将一个字节数组的一部分分配给两个单独的字节数组时,我会有一些奇怪的行为,这些字节数组将作为串行命令发送到不同的串行端口上。我已经打破了代码,以便能够更轻松地完成它;问题很容易重复,但对我来说毫无意义。
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];
你可以看到我正在使用几个整数参数,将它们转换为字节数组,然后将它们放入我构建的命令模板中的特定位置。如果我这样做而没有在中间休息至少100毫秒,cmd1
和cmd2
的内容每次都是相同的 - [3]
和[4]
两个cmd1
1}}和cmd2
将包含来自parameterBytesCmd1[0]
和[1]
的数据。
FWIW,这发生在一个单独的线程上。
答案 0 :(得分:5)
您的问题可能来自
private void Label_MouseDown(object sender, System.Windows.Input.MouseButtonEventArgs e)
{
var lbl = (Label)sender;
DragDrop.DoDragDrop(lbl, lbl.Content, DragDropEffects.Move);
Console.WriteLine("Drag...");
}
private void Label_Drop(object sender, DragEventArgs e)
{
Console.WriteLine("Drop...");
}
private void Label_DragEnter(object sender, DragEventArgs e)
{
Console.WriteLine("Label_DragEnter...");
}
private void Label_DragLeave(object sender, DragEventArgs e)
{
Console.WriteLine("Label_DragLeave...");
}
您正在将名为byte[] cmd1 = CLEAR_COMMAND;
byte[] cmd2 = CLEAR_COMMAND;
的数组复制到CLEAR_COMMAND
和cmd1
并修改其内容。您需要复制数组并将其分配给变量,因此cmd1和cmd2不会修改原始记录,也不会相互交互。
如果在文件顶部添加cmd2
,则应该能够执行以下操作来制作数组的浅表副本。根据您是否希望cmd1和cmd2指向内存中的同一阵列,您可能希望执行任何操作
using System.Linq;
或
byte[] cmd1 = CLEAR_COMMAND.ToArray();
byte[] cmd2 = CLEAR_COMMAND.ToArray();