0

誰かがこのコードの何が問題なのか説明できますか? mco を呼び出しても、このイベントは発生しません。

    private ModiconComunications.ModiconComObject withEventsField_mco = new ModiconComunications.ModiconComObject();
    private ModiconComunications.ModiconComObject mco
    {
        get { return withEventsField_mco; }
        set
        {
            if (withEventsField_mco != null)
            {
                withEventsField_mco.GetDataReturn -= mco_GetDataReturn;
            }
            withEventsField_mco = value;
            if (withEventsField_mco != null)
            {
                withEventsField_mco.GetDataReturn += mco_GetDataReturn;
            }
        }
    }

以下の行を呼び出すと、mco_GetDataReturn イベントが発生するはずですが、そうではありません。私は間違って何をしましたか?

    mco.GetData(ModiconComunications.ModiconComObject.GetDataType.READ_MODICON_HREGS, 11421, 9, 0);
4

2 に答える 2

3

さて、この行で作成された EventsField_mco でイニシャルを作成します。

private ModiconComunications.ModiconComObject withEventsField_mco = new ModiconComunications.ModiconComObject();

イベント ハンドラが接続されていません。コンストラクターでそれを行っていない限り。

于 2012-10-18T14:23:46.433 に答える
1

もう少しコードが役に立ちます。

withEventsField_mco を新しいオブジェクトで初期化します。ただし、mco プロパティでセッターを使用しないため、イベントは配線されません。

この理由をテストするためにこれを試してください:

McocontainingObject.mco = new ModiconComunications.ModiconComObject();
mco.GetData(ModiconComunications.ModiconComObject.GetDataType.READ_MODICON_HREGS, 11421, 9, 0);

またはコンストラクターで

class McoContainer{
   private ModiconComunications.ModiconComObject withEventsField_mco;

   public McoContainer(){
      this.mco = new ModiconComunications.ModiconComObject();
   }

   public ModiconComunications.ModiconComObject mco{
      get{...}
      set{...}
   }
}
于 2012-10-18T14:27:12.887 に答える