0

我有一个问题,我在C#中建立一个表单应用程序,但我不太擅长它。 我想在窗体中添加一个新功能,在后台监听串行端口,然后在文本框中显示接收到的数据,并且必须在应用程序运行期间执行此操作。串口监听器在背景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); 
    } 
} 

回答

0

把串口初始化代码到窗体的Shown事件处理程序,该DataReceived事件处理程序代码复制到窗体类的,而不是写到控制台,将数据放入一个文本框左右。

请注意,DataReceived处理程序将在单独的线程上调用,因此您需要调用this.Invoke来执行更新UI线程上的UI的代码。否则,你会得到一个例外。

+0

THX我要去尝试:对 – sanderfcb95

0

您可以使用方法调用者委托并设置DataRecieved事件中的文本。

实施例:

private static void DataReceivedHandler(object sender, SerialDataReceivedEventArgs e) 
{ 
    SerialPort sp = (SerialPort)sender; 
    string indata = sp.ReadExisting(); 

    this.Invoke((MethodInvoker)delegate 
    { 
     textBox.Text += indata; 
    }); 
}