在两种不同的表单上使用相同的串口数据接收事件

时间:2012-02-20 08:42:00

标签: c# serial-port

我的SerialDataReceivedEventHandler问题无法响应serail端口中的数据。

我有一个主要形式,我打开端口,并做其他stuf whitch需要做正确的串口通信(发送和接收工作)! 然后我在同一项目中打开另一个表格,需要相同的串口进行读写! 问题是我的form2中的SerialDataReceivedEventHandler不能正常工作,它与mainform中的第一个完全相同。 (如果我在主窗体应用程序中调用serial.close()冻结或导致大量延迟)

可能我必须在我的主要活动中公开这个活动,但我仍然不知道如何制作我的自定义事件或其他会触发表格2事件的数据到达端口的事件

我找到了此链接以获取帮助,但无法使用我的应用。

http://social.msdn.microsoft.com/Forums/en/netfxbcl/thread/7efccf0e-b412-4869-b942-a006773a833f

我正在使用VS2008,framework3.5(智能设备项目)

有人可以帮助我吗? ,拜托!

1 个答案:

答案 0 :(得分:1)

将您的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);
    }
}

同样,这是伪代码,附近没有编译器。希望这会有所帮助。