控制台中的串行端口应用程序无法正常工作
Serial Port application in console not working
我正在尝试在 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
方法 returns。由于这是您的进程的主要方法,您的进程在Main
returns.
之后终止
保持流程 运行 的一种简单方法是添加类似
的内容
Console.ReadLine();
在 Main
的末尾,因此您的程序在终止之前等待用户按下某个键。
原因是,您的程序只是终止了。你需要一种循环来保持它的活力,例如像这样。它是 运行 并检查是否已按下某个键,并且仅当按下时才停止 '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);
我正在尝试在 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
方法 returns。由于这是您的进程的主要方法,您的进程在Main
returns.
保持流程 运行 的一种简单方法是添加类似
的内容Console.ReadLine();
在 Main
的末尾,因此您的程序在终止之前等待用户按下某个键。
原因是,您的程序只是终止了。你需要一种循环来保持它的活力,例如像这样。它是 运行 并检查是否已按下某个键,并且仅当按下时才停止 '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);