串行不在设计中时的 C# 串行事件
Posted
技术标签:
【中文标题】串行不在设计中时的 C# 串行事件【英文标题】:C# serial events when the serial is not in design 【发布时间】:2019-05-19 20:55:06 【问题描述】:我在我的代码中添加了这个:
namespace uartToCs_version_2._0
public partial class formMain : Form
==> public static SerialPort serial = new SerialPort();
但是我没有使用设计选项卡,那么我应该如何进行事件处理(在当前设置下,我也可以在其他形式中使用它,这仍然可能吗)? My design file
【问题讨论】:
How to Read and Write from the Serial Port的可能重复 【参考方案1】: public Form1()
InitializeComponent();
//add DataReceived event of serial
Form1.serial.DataReceived += serial_DataReceived;
private void Form1_FormClosed(object sender, FormClosedEventArgs e)
//remove DataReceived event of serial
Form1.serial.DataReceived -= serial_DataReceived;
void serial_DataReceived(object sender, SerialDataReceivedEventArgs e)
//process data here
【讨论】:
因为序列是静态的,所以在 FormColosed 事件中,为 gc 移除 serial_DataReceived 事件 为什么需要这个? 如果serial是静态的,设置为null或者app退出时会被GC收集。当 Form1 实例关闭时,可能没有被 GC 收集到 Form1 实例,因为 Form1.serial 是 live 的,并且 Form1.serial.DataReceived 通过 exec Form1.serial.DataReceived += serial_DataReceived 引用 Form1 实例。【参考方案2】:您可以在任何方法中注册事件,例如 Load() 或在构造函数中。我使用了下面的构造函数。在设置所有需要的属性之前,您无法注册事件。我没有显示设置代码。
public partial class Form1 : Form
public static SerialPort serial = new SerialPort();
public Form1()
InitializeComponent();
serial.DataReceived += new SerialDataReceivedEventHandler(serial_DataReceived);
private void serial_DataReceived(object sender, SerialDataReceivedEventArgs e)
【讨论】:
感谢您的快速回复以上是关于串行不在设计中时的 C# 串行事件的主要内容,如果未能解决你的问题,请参考以下文章