2009-08-28 9 views
1

はこのように述べた:似ているActiveXコンポーネントの同等のコード(VB6のイベント)のActiveXコンポーネントで作成されたVB6のイベントで

PublicイベントProcessingCompleteを()

をと呼ばれる:

RaiseEvent ProcessingComplete

同じことをしたい管理対象のC++ DLLを作成しています。デリゲートがまさに私が欲しいものであるように見えません。私はより適切な項目が__event宣言であると思います。助けて?!?最後に

、私はこのような機能を持つようにしたいC#アプリケーション持た:

MyObjectには:: ProcessingComplete()< ---「RaiseEvent」が発生したときにこれが呼び出される関数です。 {

}

おかげ。

答えて

1

を同じシグネチャを持つ必要があります。 .NETでは、イベントは慣例によって特別な署名を持つ代理人に過ぎません。ここでクラスのイベントを宣言のC#の例である:送信者がイベントを発生させたとのEventArgsは、任意の情報を符号化対象である

public delegate EventHandler(object sender, EventArgs e); 

public class MyObject 
{ 
    // ... 

    public event EventHandler ProcessingComplete; 

    // ... 
} 

EventHandlerは二つのパラメータを持つデリゲートでありますイベントのサブスクライバに渡す必要があります。

すべてのイベントはこの規約に従うことが期待されます。あなたのイベントに特化した情報を伝えたい場合は、EventArgsから派生した独自のクラスを作成することができます。 .NETは、この目的のために一般的に型付けされたEventHandlerデリゲートを定義します。EventHandler<TEventArgs>。 C#の例:

class ProcessingCompleteEventArgs : EventArgs 
{ 
    public ProcessingCompleteEventArgs(int itemsProcessed) 
    { 
     this.ItemsProcessed = itemsProcessed; 
    } 

    public int ItemsProcessed 
    { 
     get; 
     private set; 
    } 
} 

// ... 

// event declaration would look like this: 
public event EventHandler<ProcessingCompleteEventArgs> ProcessingComplete; 

、イベントをサブスクライブ+=演算子を使用します。退会するには、-=演算子を使用します。あなたのクラスの中

void Start() 
{ 
    this.o = new MyObject(); 
    this.o.ProcessingComplete += new EventHandler(this.OnProcessingComplete); 

    // ... 
} 

void Stop() 
{ 
    this.o.ProcessingComplete -= new EventHandler(this.OnProcessingComplete); 
} 

void OnProcessingComplete(object sender, EventArgs e) 
{ 
    // ... 
} 

、イベントを発生するために、あなたは、デリゲートを呼び出すために通常の構文を使用することができます。

void Process() 
{ 
    // ... 

    // processing is done, get ready to fire the event 
    EventHandler processingComplete = this.ProcessingComplete; 

    // an event with no subscribers is null, so always check! 
    if (processingComplete != null) 
    { 
     processingComplete(this, EventArgs.Empty); 
    } 
} 
0

イベントと代理人。

Events and Delegates

概要:デリゲート メソッドへの参照を保持することができるクラスです。 他のクラスとは異なり、デリゲートクラス には署名があり、 と一致するメソッドに対してのみ 参照を保持できます。

Events in Managed C++: Problem with Events, WindowEvents

Managed Extensions: Using Delegates and Events

概要:.NETプログラミングは に委譲し、イベントの 概念を含むオブザーバを促進または デザインパターンをパブリッシュ/サブスクライブ。ほとんどの 回、コールバック関数が標準のWin32 APIまたはMFCプログラミングで年間使用されている の方法と同じようにイベントを使用します。

0

私はデリゲートが行く方法だと思います。

public delegate void ProcessCompleteEventHandler(object sender, EventArgs e); 

あなたのクラスのどこかで上記を定義してください。あなたのメインプログラム内部クラス

class MySampleClass{ 
    public event ProcessCompleteEventHandler ProcessComplete; 

    void SomeWork() 
    { 
     //Do some work, and when its over... 
     ProcessComplete.Invoke(this, null); 
    } 

} 

内部:

MySampleClass obj = new MySampleClass(); 
obj.ProcessComplete += new ProcessCompleteEventHandler(my_handler); 

my_handlerは、それはあなたがイベントをしたいように聞こえるん...

関連する問題