我正在尝试创建一个小型应用程序来收集从连接到 COM10 的外部传感器接收到的数据。我已经成功创建了一个小的 C# 控制台对象和应用程序,它使用 for 循环在固定的时间段内打开端口并将数据流式传输到文件。
我想将此应用程序转换为使用 dataReceived 事件进行流式传输。在阅读了Top 5 SerialPort Tips之后,我似乎仍然无法让它工作,也不知道我错过了什么。我重写了控制台应用程序,以便所有代码都在 Main 中并粘贴在下面。有人可以帮我解释一下为什么事件处理程序 port_OnReceiveDatazz 没有被调用,即使我知道硬件正在向端口发送数据?
谢谢
感谢@Gabe 、@ Jason Down和@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));
        }
    }
}