Как использовать событие dataReceived объекта порта SerialPort в C#?

Прежде всего, я рекомендую .cs-file вам использовать следующий c-sharp конструктор вместо того, который rs232 вы сейчас используете:

new SerialPort("COM10", 115200, Parity.None, 8, StopBits.One);

Затем visual-c# вам действительно следует visual-c# удалить этот код:

// Wait 10 Seconds for data...
for (int i = 0; i < 1000; i++)
{
    Thread.Sleep(10);
    Console.WriteLine(sp.Read(buf,0,bufSize)); //prints data directly to the Console
}

А вместо visual-c# этого просто зацикливайтесь, пока c# пользователь не нажмет клавишу visual-c# или что-то в этом роде, например:

namespace serialPortCollection
{   class Program
    {
        static void Main(string[] args)
        {
            SerialPort sp = new SerialPort("COM10", 115200);
            sp.DataReceived += port_OnReceiveDatazz; // Add DataReceived Event Handler

            sp.Open();
            sp.WriteLine("$"); //Command to start Data Stream

            Console.ReadLine();

            sp.WriteLine("!"); //Stop Data Stream Command
            sp.Close();
        }

       // My Event Handler Method
        private static void port_OnReceiveDatazz(object sender, 
                                   SerialDataReceivedEventArgs e)
        {
            SerialPort spL = (SerialPort) sender;
            byte[] buf = new byte[spL.BytesToRead];
            Console.WriteLine("DATA RECEIVED!");
            spL.Read(buf, 0, buf.Length);
            foreach (Byte b in buf)
            {
                Console.Write(b.ToString());
            }
            Console.WriteLine();
        }
    }
}

Также c-sharp обратите внимание на изменения serial-port в обработчике событий получения c# данных, он должен фактически csharp распечатать буфер.

ОБНОВЛЕНИЕ 1


Я только .cs-file что успешно выполнил следующий c#.net код на своем компьютере (используя c# нуль-модемный кабель между c#-language COM33 и COM34)

namespace TestApp
{
    class Program
    {
        static void Main(string[] args)
        {
            Thread writeThread = new Thread(new ThreadStart(WriteThread));
            SerialPort sp = new SerialPort("COM33", 115200, Parity.None, 8, StopBits.One);
            sp.DataReceived += port_OnReceiveDatazz; // Add DataReceived Event Handler

            sp.Open();
            sp.WriteLine("$"); //Command to start Data Stream

            writeThread.Start();

            Console.ReadLine();

            sp.WriteLine("!"); //Stop Data Stream Command
            sp.Close();
        }

        private static void port_OnReceiveDatazz(object sender, 
                                   SerialDataReceivedEventArgs e)
        {
            SerialPort spL = (SerialPort) sender;
            byte[] buf = new byte[spL.BytesToRead];
            Console.WriteLine("DATA RECEIVED!");
            spL.Read(buf, 0, buf.Length);
            foreach (Byte b in buf)
            {
                Console.Write(b.ToString() + " ");
            }
            Console.WriteLine();
        }

        private static void WriteThread()
        {
            SerialPort sp2 = new SerialPort("COM34", 115200, Parity.None, 8, StopBits.One);
            sp2.Open();
            byte[] buf = new byte[100];
            for (byte i = 0; i < 100; i++)
            {
                buf[i] = i;
            }
            sp2.Write(buf, 0, buf.Length);
            sp2.Close();
        }
    }
}

ОБНОВЛЕНИЕ 2


Учитывая всю serial-port посещаемость по этому вопросу c# за последнее время. Я начинаю c# подозревать, что либо ваш c# последовательный порт не rs232 настроен должным образом, либо rs232 устройство не отвечает.

Я rs232 настоятельно рекомендую вам csharp попытаться связаться с устройством c#-language с помощью других средств serial-port (я часто использую гипертерминал). Затем visual-c# вы можете поиграть со всеми c# этими настройками (битрейт, четность, биты serial-port данных, стоповые биты, управление csharp потоком), пока не найдете rs232 подходящий набор. В документации visual-c# к устройству также должны visual-c# быть указаны эти настройки. Как c# только я это выясню, я должен c# убедиться, что мой .NET SerialPort visual-c# правильно настроен для использования rs232 этих параметров.

Несколько serial-port советов по настройке последовательного csharp порта:

Обратите внимание: когда rs232 я сказал, что вам следует c#-language использовать следующий конструктор, я rs232 имел в виду, что используйте csharp эту функцию, а не обязательно rs232 эти параметры! Вы должны c# ввести параметры для своего c#-language устройства, настройки ниже c# являются общими, но могут c-sharp отличаться для вашего устройства.

new SerialPort("COM10", 115200, Parity.None, 8, StopBits.One);

Также c#.net важно настроить .NET SerialPort csharp на использование того же visual-c# управления потоком, что и c#-language на вашем устройстве (как c#-language говорили ранее). Вы можете visual-c# найти дополнительную информацию csharp здесь:

http://www.lammertbies.nl/comm/info/RS-232_flow_control.html

c#

serial-port

2022-11-09T12:38:31+00:00
Вопросы с похожей тематикой, как у вопроса:

Как использовать событие dataReceived объекта порта SerialPort в C#?