2012-02-20 24 views
1

SerialDataReceivedEventHandlerに問題があり、セールポートのデータに応答できません。同じシリアルポートデータ受信イベントを2つの異なるフォームで使用する

私は開いているポートに1つのメインフォームを持ち、適切なシリアルポート通信(送受信作業)のために他の作業を行う必要があります。 それから、同じプロジェクトで別のフォームを開いて、読み書き用に同じシリアルポートが必要です! 問題は、Form2のSerialDataReceivedEventHandlerがjetを動作していないことです。メインフォームの最初のものと完全に同じです。 (メインフォームのアプリケーションで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

関連する問題