控制台中的串行端口应用程序不起作用



我正在尝试在c#中创建一个console应用程序,该应用程序读取Serial Port并通过TCP将数据发送到网络中的另一台机器。

我写了以下代码

class Program
{
    static SerialPort mPort;
    static void Main(string[] args)
    {
        mPort = new SerialPort();
        mPort.BaudRate = 4800;
        mPort.StopBits = StopBits.One;
        mPort.Parity = Parity.None;
        mPort.Handshake = Handshake.None;
        mPort.DataBits = 8;
        mPort.PortName = "COM4";
        if (!mPort.IsOpen)
        {
            mPort.Open();
        }
        mPort.DataReceived += new SerialDataReceivedEventHandler(mPort_DataReceived);
    }
    private static void mPort_DataReceived(object sender, SerialDataReceivedEventArgs e)
    {
        try
        {
            if (mPort.IsOpen)
            {
            }
        }
        catch
        {
        }
    }
 }

但是应用程序在static void Main(string[] args)功能中点击mPort.DataReceived += new SerialDataReceivedEventHandler(mPort_DataReceived);行后关闭。

为什么它不触发mPort_DataReceived事件?

这是基本的控制台应用程序行为。只需添加:

    mPort.DataReceived += ...
    /// wait till something happens
    Console.Read();
}

在主方法的末尾。然后观看您的活动以被解雇。

此方法只是该行为的解决方法。

mPort.DataReceived += new SerialDataReceivedEventHandler(mPort_DataReceived);

正在订阅事件。但是你从不等待事件发生。

在该行之后,将返回Main方法。由于这是流程的主要方法,因此您的流程在返回Main终止

保持进程运行的一种简单方法是添加类似

Console.ReadLine();

Main 结束时,因此您的程序在终止之前等待用户点击某个键。

原因是,你的程序只是终止了。你需要一种循环来保持它的生命,例如这样。它正在运行并检查是否已按下某个键,并且仅在"逃生"时才停止。

        // Do initialisation work here
        ConsoleKeyInfo cki = new ConsoleKeyInfo();
        do 
        {
            // Do frequently work here
            if (Console.KeyAvailable)
            {
                cki = Console.ReadKey();
            }
        }
        while (cki.Key != ConsoleKey.Escape);

相关内容

最新更新