2012-02-20 15 views
1

我的SerialDataReceivedEventHandler無法響應serail端口中的數據時出現問題。使用兩個不同形式的相同的串行端口數據接收事件

我有一個主要的形式,我打開端口,做其他stuf whitch需要做適當的串行端口通信(發送和接收工作)! 然後,我打開另一個窗體在同一個項目,需要相同的串行端口讀取和寫入! 問題是我的SerialDataReceivedEventHandler在form2中不工作,它與mainform中的第一個完全相同。 (如果我在主窗體應用程序中調用serial.close()會導致程序死機或造成巨大的延遲)

可能我必須在我的主要事件中公開這個事件,但我仍然不知道如何進行自定義事件或其他東西將觸發表單2中的事件數據到達端口

我發現此鏈接的幫助,但不適用於我的應用程序。

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

我使用VS2008,framework3.5(智能設備項目)

能有人幫助我嗎? , 請!

回答

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.SerialDataReceived += 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); 
    } 
} 

再次,這是僞代碼,沒有編譯器附近。希望這可以幫助。

+0

非常感謝,我終於解決了這個問題,導致我很多問題! – matjaz 2012-02-20 13:33:39

相關問題