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() {

我有一个问题,我用C#构建了一个表单应用程序,但我在这方面不是很好。 我想在表单中添加一个新功能,在后台侦听串行端口,然后在文本框中显示接收到的数据,这项工作必须持续很长时间,直到应用程序运行

我从如何为控制台应用程序执行此操作中找到了一些代码,但现在我想更改代码,以便在表单中使用它,有人能帮我吗

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