【发布时间】:2018-10-23 07:26:52
【问题描述】:
在我的 form1 中,我有 serialPort1,我想将 serialPort1_DataRecieved 运行到另一个表单。 或使用 form1 串行端口为 form2 创建 datarecieved 处理程序。
我正在使用此代码将我的串行端口传递给另一个表单。
FOrm1 f1= new Form1(serialPort1);
f1.Show();
这就是我想在我的 Form2 中做的事情
SerialPort serialPort2;
public delegate void myDelegate(string sData);
public Form2(SerialPort SP)
{
InitializeComponent();
serialPort2 = SP;
}
private void Form2_Load(object sender, EventArgs e)
{
try
{
serialPort2.Open();
serialPort2.DataReceived += port_OnReceiveData;
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
publicstatic void port_OnReceiveData(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
{
string sData;
serialPort2.ReadTimeout = 20;
try
{
sData = serialPort2.ReadLine();
this.BeginInvoke((new myDelegate(Text_Out)), sData);
}
catch (Exception ex)
{
}
}
我这样做解决了我的问题
【问题讨论】:
-
将业务与 ui 层分离。将您的 serialPort 数据存储在一个通用数据存储中,可能会在新数据上触发事件,然后您可以从任何您喜欢的形式注册和请求数据。
-
我可以使用那个serialPort2来做数据接收处理程序并将它运行到那个表单中吗?
-
你能给我一些可能的解决方案吗?
-
您只能同时将一个实例连接到一个串口。如果您尝试打开第二个连接,它将无法告诉您它已在使用中。
标签: c#