串口接收数据
//串口开发发送数据(每点击一次发送一次数据)
private void tsbStartTest_Click(object sender, EventArgs e)
{
string sortNumber = "COM" + UserInfomation.SerElementPort;//获得配置端口号
if (serialPort.IsOpen == false)
{
serialPort.PortName = sortNumber;//设置通信端口
serialPort.StopBits = StopBits.One;//停止位
serialPort.DtrEnable = true;
serialPort.BaudRate = 19200; //波特率
serialPort.Open();
}
tsbStartTest.Enabled = false;
Closings = false;//不是正在关闭中
//***************************** //对Com口监听实例委托
updateText = new UpdateTextEventHandler(UpdateTextBox);
//声明开始接收端口的事件
serialPort.DataReceived += new System.IO.Ports.SerialDataReceivedEventHandler(serialPortMailk_DataReceived);
//*****************************
bool isResult = SerialPortInfo.Run(serialPort, 0);
if (isResult == false)
{
MessageBox.Show("发送指令失败");
}
} 在//*****************************之间包含的这段代码如果放在Load方法里面和放在这个地方作用是一样的吗?有什么不同?
//串口开发发送数据(每点击一次发送一次数据)
private void tsbStartTest_Click(object sender, EventArgs e)
{
string sortNumber = "COM" + UserInfomation.SerElementPort;//获得配置端口号
if (serialPort.IsOpen == false)
{
serialPort.PortName = sortNumber;//设置通信端口
serialPort.StopBits = StopBits.One;//停止位
serialPort.DtrEnable = true;
serialPort.BaudRate = 19200; //波特率
serialPort.Open();
}
tsbStartTest.Enabled = false;
Closings = false;//不是正在关闭中
//***************************** //对Com口监听实例委托
updateText = new UpdateTextEventHandler(UpdateTextBox);
//声明开始接收端口的事件
serialPort.DataReceived += new System.IO.Ports.SerialDataReceivedEventHandler(serialPortMailk_DataReceived);
//*****************************
bool isResult = SerialPortInfo.Run(serialPort, 0);
if (isResult == false)
{
MessageBox.Show("发送指令失败");
}
} 在//*****************************之间包含的这段代码如果放在Load方法里面和放在这个地方作用是一样的吗?有什么不同?
serialPort.DataReceived += ... 是订阅事件,它放在何处并无强制要求。但在订阅之前,串口即使接收到数据,也无法引发DataReceived事件
按照上面的分析,我能以下理解吗?
如果我点第一次订阅了一次,当引发该事件DataReceived,处理一次接收到的数据
如果我点第二次有订阅了一次,当引发该事件DataReceived的时候是否是处理两次接收到的数据?
一次类推,是这样的吗?
因此订阅不要放在此处。避免DataReceived被调用多次,同时也避免其它的隐患。这点对于使用事件来说也算是一个比较普遍的原则了
http://topic.csdn.net/u/20120203/16/16996fd5-97e7-4212-9d15-fcff08f8e2e3.html