我正在尝试在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
事件??
答案 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);