Я до сих пор не понял, как использовать дескриптор, возвращенный CreateFile, для создания объекта SerialPort в стиле C # / .NET, если бы я знал, как это сделать, то я думаю, что я мог бы прекрасно использовать COM10 + из C #.

аюсь создать небольшое приложение для сбора данных, полученных от внешнего датчика, подключенного к COM10. Я успешно создал небольшой консольный объект и приложение C #, который открывает порт и передает данные в файл в течение фиксированного периода времени, используя цикл for.

Я хотел бы преобразовать это приложение, чтобы вместо него использовать событие dataReceived для потоковой передачи. После прочтения5 лучших советов по SerialPortЯ до сих пор не могу понять, как это работает, и не знаю, чего мне не хватает. Я переписал консольное приложение так, чтобы весь код был в Main и вставлен ниже. Может ли кто-нибудь помочь мне объяснить, почему не вызывается обработчик событий port_OnReceiveDatazz, хотя я знаю, что оборудование посылает данные в порт?

Спасибо

Азим

PS: спасибо@Gabe, @ Джейсон Даун, а также@abatishchev за все предложения. Я в тупике и не могу заставить обработчик событий работать. Возможно, это как-то связано с устройством. Я могу жить только с чтением порта в потоке и потоковой передачи данных прямо в файл.

Код

namespace serialPortCollection
{   class Program
    {
        static void Main(string[] args)
        {

            const int bufSize = 2048;
            Byte[] buf = new Byte[bufSize]; //To store the received data.

            SerialPort sp = new SerialPort("COM10", 115200);
            sp.DataReceived += port_OnReceiveDatazz; // Add DataReceived Event Handler

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

            // Wait for data or user input to continue.
            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;
            const int bufSize = 12;
            Byte[] buf = new Byte[bufSize];
            Console.WriteLine("DATA RECEIVED!");
            Console.WriteLine(spL.Read(buf, 0, bufSize));
        }
    }
}

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

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