我的SerialDataReceivedEventHandler出现问题,whitch无法响应serail端口中的数据。
我在whitch中有一个主要形式,我打开端口,做其他需要做的研究,以进行正确的串行端口通信(发送和接收工作)!然后我在同一个项目中打开另一个表单,需要相同的串行端口进行读写!问题是我在form2中的SerialDataReceivedEventHandler不工作,因为它与mainform中的第一个完全相同。(如果我在主窗体中调用serial.close()应用程序冻结或导致巨大延迟)
可能我必须公开这个事件的主要内容,但我仍然不知道如何使我的自定义事件或其他会触发表单2中数据到达端口的事件
我找到了此帮助链接,但不适用于我的应用程序。
http://social.msdn.microsoft.com/Forums/en/netfxbcl/thread/7efccf0e-b412-4869-b942-a006773a833f
我使用的是VS2008,framework3.5(智能设备项目)
有人能帮我吗,请
将SerialPort消耗移动到一个单独的静态(或单例)类中。在该类中创建一个DataReceived事件,并在每次接收数据时激发它。让两个表单都订阅DataReceived事件-这样两个表单将接收数据。
编辑1:伪代码中的样本
public static class Serial {
public static delegate void DataReceivedEventHandler(object sender, ReceivedEventArgs e);
public static event DataReceivedEventHandler DataReceived;
static SerialPort serialPort = new SerialPort();
static Serial() {
serialPort = new SerialPort();
serialPort.DataReceived += Incoming;
serialPort.Open();
}
private static void Incoming(object sender, SerialDataReceivedEventHandler args) {
if (DataReceived != null) {
ReceivedEventArgs rea = new ReceivedEventArgs {Data = args.Data};
DataReceived(this, rea);
}
}
}
public class ReceivedEventArgs : EventArgs {
public string Data { get; set;}
}
public class Form1: Form {
public Form1() {
Serial.DataReceived += Incoming;
}
private void Incoming(object sender, ReceivedEventArgs e) {
// you receive the data here
Debug.WriteLine(e.Data);
}
}
public class Form2: Form {
public Form2() {
Serial.DataReceived += Incoming;
}
private void Incoming(object sender, ReceivedEventArgs e) {
// you receive the data here
Debug.WriteLine(e.Data);
}
}
同样,这是伪代码,附近没有编译器。希望这能有所帮助。