C# 后台C中的串口侦听器#
我有一个问题,我用C#构建了一个表单应用程序,但我在这方面不是很好。 我想在表单中添加一个新功能,在后台侦听串行端口,然后在文本框中显示接收到的数据,这项工作必须持续很长时间,直到应用程序运行 我从如何为控制台应用程序执行此操作中找到了一些代码,但现在我想更改代码,以便在表单中使用它,有人能帮我吗C# 后台C中的串口侦听器#,c#,forms,serial-port,console-application,background-process,C#,Forms,Serial Port,Console Application,Background Process,我有一个问题,我用C#构建了一个表单应用程序,但我在这方面不是很好。 我想在表单中添加一个新功能,在后台侦听串行端口,然后在文本框中显示接收到的数据,这项工作必须持续很长时间,直到应用程序运行 我从如何为控制台应用程序执行此操作中找到了一些代码,但现在我想更改代码,以便在表单中使用它,有人能帮我吗 using System; using System.IO.Ports; class PortDataReceived { public static void Main() {
using System;
using System.IO.Ports;
class PortDataReceived
{
public static void Main()
{
SerialPort mySerialPort = new SerialPort("COM8");
mySerialPort.BaudRate = 57600;
mySerialPort.Parity = Parity.None;
mySerialPort.StopBits = StopBits.One;
mySerialPort.DataBits = 8;
mySerialPort.Handshake = Handshake.None;
mySerialPort.DataReceived += new SerialDataReceivedEventHandler(DataReceivedHandler);
mySerialPort.Open();
Console.WriteLine("Press any key to continue...");
Console.WriteLine();
Console.ReadKey();
mySerialPort.Close();
}
private static void DataReceivedHandler(
object sender,
SerialDataReceivedEventArgs e)
{
SerialPort sp = (SerialPort)sender;
string indata = sp.ReadExisting();
Console.WriteLine("Data Received:");
Console.Write(indata);
}
}
将串行端口初始化代码放入表单的
显示的事件处理程序中,将接收的数据
事件处理程序代码复制到表单类an中,而不是写入控制台,将数据放入文本框中
请注意,DataReceived
处理程序将在单独的线程上调用,因此您需要调用this.Invoke
,以执行更新UI线程上UI的代码。否则会出现异常。将串行端口初始化代码放入表单的显示的事件处理程序中,将DataReceived
事件处理程序代码复制到表单类an中,而不是写入控制台,将数据放入文本框中
请注意,DataReceived
处理程序将在单独的线程上调用,因此您需要调用this.Invoke
,以执行更新UI线程上UI的代码。否则会出现异常。您可以使用方法调用器委托,并在数据接收事件中设置文本
例如:
private static void DataReceivedHandler(object sender, SerialDataReceivedEventArgs e)
{
SerialPort sp = (SerialPort)sender;
string indata = sp.ReadExisting();
this.Invoke((MethodInvoker)delegate
{
textBox.Text += indata;
});
}
您可以使用方法调用器委托并在datareceived
事件中设置文本
例如:
private static void DataReceivedHandler(object sender, SerialDataReceivedEventArgs e)
{
SerialPort sp = (SerialPort)sender;
string indata = sp.ReadExisting();
this.Invoke((MethodInvoker)delegate
{
textBox.Text += indata;
});
}
我要试试那个:pThx我要试试那个:p