我正在开发一个通过串行端口与设备通信的 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();
}
}
您可以尝试通过将 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);
}
}