控制台中的串口应用程序无法正常工

时间:2016-06-02 07:02:43

标签: c# serial-port console-application

我正在尝试在console中创建一个c#应用程序,其中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
        {

        }
    }
 }

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

为什么它不会触发mPort_DataReceived事件??

3 个答案:

答案 0 :(得分:2)

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

    mPort.DataReceived += ...

    /// wait till something happens
    Console.Read();
}

在主要方法的最后。然后看你的事件被解雇。

这种方法只是解决这种问题的方法。

答案 1 :(得分:2)

该行

mPort.DataReceived += new SerialDataReceivedEventHandler(mPort_DataReceived);

正在订阅该活动。但是永远不会等待才能发生事件。

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

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

的内容
Console.ReadLine();

Main的末尾,因此您的程序会在用户终止之前等待用户按键。

答案 2 :(得分:0)

原因是,您的程序只是终止。你需要一种循环才能让它保持活力,例如像这样。它正在运行并检查是否按下了某个键,并且仅当它是“Escape”时停止。

        // Do initialisation work here

        ConsoleKeyInfo cki = new ConsoleKeyInfo();
        do 
        {
            // Do frequently work here

            if (Console.KeyAvailable)
            {
                cki = Console.ReadKey();
            }
        }
        while (cki.Key != ConsoleKey.Escape);