2011-01-14 21 views
2

私はVS2008を使用してC#でDLLを作成しています。C#でDLLからカスタムイベントを生成

このDLLは、アプリケーションとシリアルポートの間のインターフェイスとして機能します。アプリケーションは、このDLLに対して特定の形式(またはそれは標準プロトコルに従う)でデータを送信します。 DLLはそれをシリアル送信およびシリアルポート経由で送信するために変換します。他のPC(クライアントと同様に動作する手段)で動作し、シリアル経由で接続されている同じアプリケーションがこのデータを受信します。同じDLLがこのデータを取得します。これで標準プロトコルに変換され、アプリケーションが読むことができるようにbuffeに置きます。

データの送信に問題はありませんが、受信中にデータを取得して処理できるように、シリアルデータ受信イベントをDLLで使用しました。私の問題は、どのようにデータが処理され、それが利用可能であり、バッファを読み取ることができるのかをアプリケーションに示すことができるのですか?

私はDLLでSetEventsを使用することができますし、DLL

+0

は、DLLは、.NETクラスライブラリまたはネイティブライブラリですか? –

+0

@Jon Skeet .NETクラスライブラリです。 – Swanand

答えて

1

あなたがイベントを作成し、イベントを受信したシリアルデータ内のデータを処理した後、それを発射する必要があることを利用したアプリケーションを示すために使用することができます。必要に応じて、カスタムイベント引数を使用してデータを渡すことができます。

これはあなたのDLLのコードです:

public delegate void dllFinishedHandler(object sender, object tag); 
    public event dllFinishedHandler DllFinished; 
    protected virtual void OnDllFinished(object e) 
    { 
     if (DllFinished!= null) 
      DllFinished(this, e); 
    } 

アプリケーションでイベントハンドラを設定する必要がありますコードを実装した後。

以下のコードはオブジェクトをアプリに渡します。 EventArgsから継承するの

public delegate void dllFinishedHandler(object sender, SerialDataReceivedEventArgs eventArgs); 
    public event dllFinishedHandler DllFinished; 
    protected virtual void OnDllFinished(SerialDataReceivedEventArgs e) 
    { 
     if (DllFinished!= null) 
      DllFinished(this, e); 
    } 

とSerialDataReceivedEventArgsの代わりに次のコードでそれを使用する:あなたは利用SerialDataReceivedEventArgsまたはカスタムイベントハンドラのいずれかもそれは次のように見えるかもしれでき

public class DllEventArgs : EventArgs 
{ 
    private byte[] buffer; 

    public byte[] Buffer 
    { 
     get 
     { 
      return buffer; 
     } 
    } 

    public DllEventArgs(byte[] buff) 
    { 
     buffer = buff; 
    } 
} 

、あなたのアプリができますバッファーに到達します(私はそのバイト[]をイベントから直接推測します)。

0

データの処理時期を知っていますか。

public event EventHandler Processed 

としてクラスで

if(Processed != null) 
Processed(this, new EventArgs()); 

Decalreイベントはあなたがまた、カスタムイベント引数を渡すと、使用することができ、そうならば、汎用のEventHandler

関連する問題