Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/333.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 控制台中的串行端口应用程序不工作_C#_Serial Port_Console Application - Fatal编程技术网

C# 控制台中的串行端口应用程序不工作

C# 控制台中的串行端口应用程序不工作,c#,serial-port,console-application,C#,Serial Port,Console Application,我正在尝试在c#中创建一个控制台应用程序,它读取串行端口,并通过TCP将数据发送到网络中的另一台机器 我已经编写了以下代码 class Program { static SerialPort mPort; static void Main(string[] args) { mPort = new SerialPort(); mPort.BaudRate = 4800; mPort.StopBits = StopBits.O

我正在尝试在
c#
中创建一个
控制台
应用程序,它读取
串行端口
,并通过
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\u DataReceived)后关闭静态void Main(字符串[]args)
函数中的行


为什么不触发
mPort\u DataReceived
事件???

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

    mPort.DataReceived += ...

    /// wait till something happens
    Console.Read();
}
在主方法的末尾。然后看你的活动被解雇


此方法只是该行为的一种变通方法。

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

    mPort.DataReceived += ...

    /// wait till something happens
    Console.Read();
}
在主方法的末尾。然后看你的活动被解雇

这种方法只是这种行为的一种变通方法。

mPort.DataReceived += new SerialDataReceivedEventHandler(mPort_DataReceived);
正在订阅该活动。但你永远不会等待事件发生

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

保持流程运行的一个简单方法是添加以下内容

Console.ReadLine();
Main
的末尾,因此您的程序在终止前等待用户按一个键。

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);

原因是,您的程序只是终止。你需要一种循环来保持它的活力,比如这样。它正在运行并检查是否按下了一个键,只有在“退出”时才会停止

        // Do initialisation work here

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

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