事件没有解雇

时间:2012-10-18 14:20:33

标签: c#

有人可以解释这段代码有什么问题吗?当我打电话给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);

2 个答案:

答案 0 :(得分:3)

好吧,你首先使用了由这一行创建的事件文件_mco_mco:

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

不会让它的事件处理程序联系起来。除非你在构造函数中这样做。

答案 1 :(得分:1)

多一点代码会有所帮助。

使用新对象初始化withEventsField_mco。 但是,由于您未在mco属性上使用setter,因此无法连接任何事件。

尝试这个来测试这个推理:

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{...}
   }
}