Я пишу код C# для использования с Unity3D, чтобы читать из последовательного порта. Это делается с помощью другого потока. Поток чтения зависает при вызове метода SerialPort.Read. Класс чтения поток выглядит следующим образом:Тема не читается
public class Serial_Port_Reader {
private SerialPort port;
private byte[] data;
private int bytes;
public Serial_Port_Reader(SerialPort in_port, int in_bytes) {
port = in_port;
bytes = in_bytes;
data = new byte[bytes];
}
public void read() {
try {
while(true) {
IO.log.Add("A");
data = new byte[bytes];
IO.log.Add("C");
port.Read(data, 0, 1);
IO.log.Add("Data Received: "+DateTime.Now.ToString());
Data.parse(data);
IO.log.Add("D");
port.DiscardInBuffer();
}
}
catch(ThreadAbortException e) {IO.log.Add("Abort:"+e.Message);}
catch(IOException e) {IO.log.Add("IO:"+e.Message);}
catch(Exception e) {IO.log.Add(e.Message);}
finally {if(port.IsOpen) port.Close();}
}
}
Это называется так:
workaround = new Serial_Port_Reader(input, Data.bytes);
reader = new Thread(new ThreadStart(workaround.read));
reader.Start();
Если нить уже активна она останавливается на «C» и остается там, даже когда я отправить данные. Если я начну поток в середине приема данных, он будет работать так, как должен (то есть будет читать один символ), а затем остановиться на «C» в следующем цикле.
Я пытаюсь заставить его непрерывно читать данные. Почему он останавливается на «С» и не продолжается при обычных обстоятельствах?
Под 'C' вы подразумеваете в строке:' IO.log.Add («C»); '? –
Вызывает ли это исключение? –
Да, 'C' Я имею в виду' IO.Log.Add («C»); 'Никакое исключение не выбрасывается. –