직렬 포트 관련 응용 프로그램에서 작업 중입니다. SerialPort
의 DataReceived
이벤트를 사용하는 동안 내가받은 바이트 텍스트 상자를 업데이트해야합니다 작업을 종료하기 전에 InvokeRequired를 올바르게 사용하십시오.
private void Connection_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
ledReceive.On = true;
var data = Connection.ReadExisting();
_readBuffer.Add(data);
Invoke(new EventHandler(AddReceivedPacketToTextBox));
}
그래서 나는 텍스트 상자를 업데이트
Invoke
를 사용합니다. 그러나 큰 문제가 있습니다. 연결을 닫으려고 할 때 UI가 얼어 버린 것 같습니다. 아마도
Invoke
이 아마도 somehing을하고 있다고 생각합니다.
친구는 내가 RequiredInvoke
을 사용해야한다고 말했지만, 나는 그가 정말로 뭘 말하고 있는지 전혀 모른다. 호출 및 UI 스레드를 엉망으로 만들지 않고 연결을 닫을 수 있습니까? 나는 완전히 잘 모르겠지만, 당신이 동결 이유를 설명 할 수있는 연결을 닫을 때 나는 당신의 UI를 업데이트하는 스레드를 제거 추측 할
private void DisconnectFromSerialPort()
{
if (Connection != null && Connection.IsOpen)
{
Connection.Close();
_receivedPackets = 0; //reset received packet count
}
}
감사 : 또는 당신은 아마 나보다 더 이해에서 멋진 대답을 읽을 수 있습니다. 왜 2 개의 똑같은 질문이 생겼는지 아무 아이디어도 !! –