저는 C #을 완전히 처음 접했고 알아낼 수없는 매우 간단한 문제가 있습니다. 완전히 이해하지 못하는 기존 코드를 개선하려고합니다.
"연결"버튼을 누르면 내 프로그램이 직렬 포트를 사용하여 장치에 연결됩니다.
private void button_Connect_Click(object sender, EventArgs e)
{
serialPort.PortName = (string)comboBox_SerialPorts.SelectedItem;
serialPort.Open();
serialPort.DataReceived += SerialPort_DataReceived;
}
SerialPort_DataReceived 메서드는 DataReceived 이벤트를 처리합니다.
public delegate void InvokeTreatment(byte[] buffer);
private void SerialPort_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
byte[] buffer = new byte[13];
try
{
serialPort.Read(buffer, 0, buffer.Length);
byte tmp = 0;
for (int i = 1; i < 11; i++)
tmp += buffer[i];
if ((buffer[11] == tmp) && (buffer[12] == '!'))
try
{
this.BeginInvoke(new InvokeTreatment(Treatment_UART), new object[] { buffer });
}
catch { }
}
catch { }
}
Treatment_UART는 시리얼 포트의 값을 사용하여 인터페이스에 값을 표시하는 기능입니다.
private void Traitement_UART(byte[] buffer)
이 시점에서 내 프로그램은 올바르게 작동합니다. 내 시리얼 장치에서받은 값을 실시간으로 표시합니다.
이제 버튼을 누를 때 시작되는 " Processing " 이라는 다른 방법으로 일부 처리를 수행하려고 합니다 (예 : 직렬 장치에서받은 데이터를 처리하는 long for 루프). 내 문제는 처리 실행 중에 직렬 값의 실시간 수신 및 표시가 더 이상 활성화되지 않는다는 것입니다. Processing 실행 중에 Serial 장치에서 정보를 계속 수신하려면 프로그램이 필요합니다 .
이를 수행하는 다른 방법이있을 수 있습니다. 다른 스레드에서 내 함수를 실행하거나 단순히 내 Processing 메서드 내에서 "SerialPort_DataReceived"메서드를 호출하는 것에 대해 생각했습니다 . 어떻게해야합니까? 다른 스레드 에서 Processing 을 실행 하면 직렬 포트에서 잘못된 (또는 실현되지 않은) 값을 읽을 위험이 있습니다.
미리 감사드립니다!
다중 스레드를 사용하려면 using System.Threading;
맨 위에 있는를 사용하고 있는지 확인한 다음 다음을 수행하십시오.
Thread thread = new Thread(yourFuntionHere(params));
thread.Start();
메서드가 완료되면 스레드가 자동으로 닫히므로 걱정할 필요가 없습니다!
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다