访问多种形式的串口 C# .NET

问题描述 投票:0回答:1

我正在开发一个通过串行端口与设备通信的 Windows 应用程序。从表格一开始,我连接到端口并向设备发送密码。然后,有12个选项可供设置。点击表格 1 中的设置按钮,会弹出第二个表格,上面有 12 个选项。第二个表单上有 12 个按钮,每个按钮都会向设备发送一条消息。如何向我的串行端口类添加第二种形式? 这是我的串口类的一部分:

namespace SerialPort_GUI
{
    class SerialComm : SerialPort
    {
        private Boolean IsReceiving = false;
        private Boolean IsRuning = false;
        private Boolean IsPeriodSending = false;
        private int sleepTime = 200;
        Thread receivingThread = null;

        Form1 form;
        /// Initializes a new instance of the <see cref="SerialComm"/> class.
        public SerialComm(Form1 form)
        {
            this.form = form;
            base.WriteTimeout = 100;
            //base.= new SerialPort();
            receivingThread = new Thread(DoReceive);
            IsRuning = true;
            receivingThread.Start();
        }
        
}
c# .net visual-studio user-interface
1个回答
0
投票

您可以尝试通过将 Form1 的实例传递给 SerialComm 类的构造函数并在 SerialComm 类中保存对 Form1 的引用,将消息/结果传递回 Form1。

在这种情况下,当您创建第二个表单(Form2)时,您可以传递对 SerialComm 类的引用,以便 Form2 可以向设备发送消息,并且 SerialComm 类可以将结果传递回 Form1。

  public partial class Form1 : Form
 {
     private SerialComm serialComm;

     public Form1()
     {
         InitializeComponent();
         serialComm = new SerialComm(this);
     }

     public void HandleReceivedData(string data)
     {
         // Handle received data here
     }

     private void OpenForm2Button_Click(object sender, EventArgs e)
     {
         // Open Form2 and pass reference to SerialComm
         Form2 form2 = new Form2(serialComm);
         form2.Show();
     }
 }


表格2:

public partial class Form2 : Form
{
    private SerialComm serialComm;

    public Form2(SerialComm serialComm)
    {
        InitializeComponent();
        this.serialComm = serialComm;
    }

    private void SendMessageButton_Click(object sender, EventArgs e)
    {
      
        serialComm.SendData("YourMessageHere");
    }
}

串行通讯:

  public class SerialComm : SerialPort
 {
     private Boolean IsReceiving = false;
     private Boolean IsRuning = false;
     private Boolean IsPeriodSending = false;
     private int sleepTime = 200;
  
     private Form1 form;
     private Thread receivingThread;

     public SerialComm(Form1 form)
     {
         this.form = form;
         base.WriteTimeout = 100;
         receivingThread = new Thread(DoReceive);
         receivingThread.Start();
     }

     private void DoReceive()
     {
         while (true)
         {
             if (IsRuning)
             {
                 // Receive data from the device
                 string data = ReadLine();

                 // Pass the received data to Form1
                 form.HandleReceivedData(data);
             }
         }
     }

     public void SendData(string data)
     {
         WriteLine(data);
     }
 }
© www.soinside.com 2019 - 2024. All rights reserved.