Это очень простая реализация. Я надеюсь, что это помогает

ужно прочитать данные из моего виртуального COM-порта и обнаружить сообщение «Dreq». Как только я нажимаю кнопку подключения, он подключается к моему порту COM8 и начинает читать в новой теме. У меня также есть кнопка отключения, в которой я хочу закрыть чтение и отключиться от порта COM8. Однако у меня есть проблемы с закрытием BeginRead.

public partial class Form1 : Form
{
    SerialPort sp;
    Stream stream;
    IAsyncResult recv_result;

    private void button1_Click(object sender, EventArgs e)
    {
        sp = new SerialPort("COM8", 9600);
        sp.Open();
        sp.ReadTimeout = 50000;
        sp.NewLine = "\n\r\0";
        stream = sp.BaseStream;
        recv_result = stream.BeginRead(new byte[1], 0, 0, new 
                                       AsyncCallback(ReadCallBack), stream);
    }

    private void ReadCallBack(IAsyncResult ar)
    {            
        Stream stream = (Stream)ar.AsyncState;
        string temp;

        while (stream.CanRead)
        {
            temp = sp.ReadLine();                
            // ... do something with temp
        }
    }

    private void disconnectButton_Click(object sender, EventArgs e)
    {
        stream.EndRead(recv_result);
        sp.Close();
    }
}

Ответы на вопрос(3)

Ваш ответ на вопрос