C# 事件未触发

C# 事件未触发,c#,C#,有人能解释一下这个代码的错误吗?当我打电话给mco时,此事件不会触发 private ModiconComunications.ModiconComObject withEventsField_mco = new ModiconComunications.ModiconComObject(); private ModiconComunications.ModiconComObject mco { get { return withEventsField_m

有人能解释一下这个代码的错误吗?当我打电话给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);

好的,您以Events Field_mco开头,这一行创建的事件:

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

没有连接到事件处理程序。除非您在构造函数中执行此操作。

那么,您可以使用EventsField\u mco初始化,这是由此行创建的:

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

没有连接到事件处理程序。除非您在构造函数中执行此操作。

多编写一点代码会很有帮助

您可以使用事件初始化,并使用新对象创建字段。 但是,由于不在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{...}
   }
}

多一点代码会很有帮助

您可以使用事件初始化,并使用新对象创建字段。 但是,由于不在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{...}
   }
}

我没有看到任何事件触发代码。您是否能够确认该对象确实在调用该事件?我没有看到任何事件触发代码。您是否能够确认该对象确实在调用该事件?set语句在mco事件中不是这样做的吗?@MarkoLombardi:除非您确实执行
mco=在某个地方有事件字段(mco
)。通过直接设置
with eventsfield\u mco
绕过setter,从而绕过setter中连接事件的代码。这不是set语句在mco事件中所做的吗?@MarkoLombardi:除非您确实在某个地方执行
mco=with eventsfield\u mco
。通过直接使用EventsField_mco设置
,绕过setter,从而绕过连接事件的setter中的代码。