2016-10-17 3 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

당신의 문제는 아마 당신은 cmd1cmd2 그 내용을 수정 모두 CLEAR_COMMAND라는 이름의 배열을 복사하는

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

에서 온다. 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; 
을 수행 할 것
관련 문제