2016-10-17 41 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; 
相關問題