.NET 4.0에서 응답을 기다렸다가 응답을 반환 할 수 있습니까? SerialPort 응답을 기다립니다.
은 현재 내가 이런 식으로 일을 해요하지만 정말 좋은하지 않고 나는 그것을 좋아하지 않아 :public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
byte[] options = new byte[]{1,1,0};
COMManager mgr = new COMManager("COM1");
byte[] result = mgr.GetResponse(options);
}
}
그리고 내 COM 관리자 클래스 (나는 별도의 작업을해야 할 클래스 (dll)) :
public class COMManager
{
SerialPort sp = null;
byte[] result = null;
bool completed = false;
public COMManager(string comport)
{
sp = new SerialPort(comport);
sp.DataReceived +=new SerialDataReceivedEventHandler(sp_DataReceived);
}
public byte[] GetResponse(byte[] option)
{
sp.Write(option, 0, option.Length);
//I don't like the way...
while (!completed) { }
completed = false;
return result;
}
void sp_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
result = new byte[sp.BytesToRead];
sp.Read(result, 0, sp.BytesToRead);
completed = true;
}
}
우리는 "await"문을 사용할 수 있습니다. 그러나 현재 프로젝트에서는 .NET 4.0 만 사용할 수 있습니다. 아이디어가 있으십니까?
안녕하세요 Asti. 답장을 보내 주셔서 감사합니다. 전에 ManualResetEvents를 사용하지 않았습니다. 그래서 "개인 정적 ManualResetEvent mre = new ManualResetEvent (false);"추가합니다. 내 COMManager 클래스 및 "mre.Reset()"내 while 루프를 바꿉니다. 그리고 dp_DataReceived 완료된 = true 대신 mre.Set() 설정? – user1011394
@ user1011394 네, 기본적으로. 정적이라고 선언하지 마십시오. – Asti
AutoResetEvent는 설정 한 후 자동으로 재설정되므로 원하는 경우 Reset을 호출 할 필요가 없습니다. – Asti