이번에는 아주 간단한 질문입니다. 다른 컴퓨터에서 다른 응용 프로그램 복사본과 통신하는 응용 프로그램이 있습니다. 한 응용 프로그램은 꽤 일정한 데이터 스트림을 보내고 다른 응용 프로그램은 데이터를 수신합니다.SerialPort 연결 개선
private void bgDataWorker_DoWork(object sender, System.ComponentModel.DoWorkEventArgs e){
try{
string tempStr = Convert.ToString(String.Format("{0:0.000000}", data));
serialPort.Write(tempStr); // Write "data" out to 6 decimal places
}
catch (TimeoutException){ }
catch (InvalidOperationException err){ // Port is obstructed or closed
this.Invoke((MethodInvoker)delegate{
MessageBox.Show(this, "Couldn't send wireless data:\n\n" +
err.ToString(), "NanoMETER - Wireless Error (Data)",
MessageBoxButtons.OK, MessageBoxIcon.Error);
Global.remoteEna = false;
serialPort.Close();
usingBT = false;
});
}
}
그것은 타이머에라고 (serialPort
는 C# 닷넷 2.0의 System.IO.Ports.SerialPorts
클래스의 인스턴스 임)
데이터를 전송하는 코드는 다음과 같습니다. 수신 코드는 더욱 간단하다 : 데이터 전송 및 처리하고 그것을 잘 멋쟁이 모든하지만이 중 하나를 안정적으로 일정한 속도로 데이터를 전송 아니에요 원하지 않는 물결이 거침이, 또는이 모든 것을 따기 아니에요됩니다
private void serialPort_DataReceived(object sender, SerialDataReceivedEventArgs e) {
string buffer = serialPort.ReadExisting();
HandleInput(buffer);
}
. 내 코드에서이 문제를 해결할 수 있는지, 아니면 느린 컴퓨터와 흔들릴 수있는 블루투스 연결을 사용하는 것만 큼 확실하지 않습니다. 어떤 제안?
왜 타이머에서 호출됩니까? 이벤트에 의해 트리거되지 않아야합니까? – Fosco
Bgw DoWork()가 타이머에서 호출 되었습니까? –
@Fosco : 타이머의 이벤트로 인해 데이터가 계속 변경됩니다. 하지만 데이터 값이 업데이트되는 즉시 호출해야한다는 제안을 받고 있다고 생각합니다. 덧붙여 말하자면, 그것은 여전히 타이머에있을 것이고 아마도 많은 차이를 만들지는 않을 것이다. 그러나 나는 그 논리를 이해한다. 참고 : 저는 오래된 VB6 프로그램을 인턴쉽을 위해 C# (2 개월 전에 모르는 언어)에 적용하고 있습니다 ... 그래서 WTF가 기대 될 수 있습니다. – KChaloux