public void SendReceiveWithBeginEnd() { using (SerialPortStream src = new SerialPortStream(SourcePort, 115200, 8, Parity.None, StopBits.One)) using (SerialPortStream dst = new SerialPortStream(DestPort, 115200, 8, Parity.None, StopBits.One)) { src.WriteTimeout = TimeOut; src.ReadTimeout = TimeOut; dst.WriteTimeout = TimeOut; dst.ReadTimeout = TimeOut; src.Open(); Assert.That(src.IsOpen, Is.True); dst.Open(); Assert.That(dst.IsOpen, Is.True); SendReceiveAsyncState state = new SendReceiveAsyncState { src = src, dst = dst, sendBuf = new byte[src.WriteBufferSize], recvBuf = new byte[src.WriteBufferSize + 10] }; Random r = new Random(); r.NextBytes(state.sendBuf); // Here we start the read and write in parallel. The read will wait up to c_Timeout for the first byte. dst.BeginRead(state.recvBuf, 0, state.recvBuf.Length, SendReceiveAsyncReadComplete, state); src.BeginWrite(state.sendBuf, 0, state.sendBuf.Length, SendReceiveAsyncWriteComplete, state); if (!state.finished.WaitOne(30000)) { Assert.Fail("BeginWrite/BeginRead test case timeout"); } } }
public static IAsyncResult BeginRead(this SerialPortStream stream, out Message message, AsyncCallback callback, object state) => stream.BeginRead((message = new Message()).MessageBytes, 0, Message.messageSize, callback, state);