日期:2014-05-18  浏览次数:20816 次

事件注册的回调函数不能执行。分少了点,但问题很费解,求救
我的GUI在调用dll里面的一个方法HandControlValve7_Value()的时候,这个方法里面注册了一个事件。回调函数也是在这个dll里面写的,为什么回调函数无法触发?

C# code

public class dllTest
    {
        public AxActQJ71E71TCP PlcSocket = null;

        public dllTest(ref AxActQJ71E71TCP _PlcSocket)
        {
             PlcSocket = _PlcSocket;
        }

        public override bool HandControlValve7_Value()
        {
            this._szDevice = "D136";
            eData = new int[4] { 1, 2, 3, 4 };
            int iRet = PlcSocket.EntryDeviceStatus(this._szDevice,1, 1, ref _eData[0]);
            PlcSocket.OnDeviceStatus += new _IActQJ71E71TCPEvents_OnDeviceStatusEventHandler(PlcSocket_OnDeviceStatus);

            return false;    
        }

        public void PlcSocket_OnDeviceStatus(object sender, _IActQJ71E71TCPEvents_OnDeviceStatusEvent e)
        {
            if (e.szDevice == "D136")
            {
                PlcSocket.FreeDeviceStatus();
            }
        }
}



接下来,我新建一个项目,引用这个dll,窗口上添加一个按钮,这样写

C# code

       public AxActQJ71E71TCP GuiPlcSocket = new AxActQJ71E71TCP();

       private void button3_Click(object sender, EventArgs e)
        {
              dllTest dlltst = new dllTest(ref GuiPlcSocket );
              dlltst.HandControlValve7_Value();
        }



好,我调用了这个方法HandControlValve7_Value(),注册了事件,但是事件PlcSocket_OnDeviceStatus没有执行。

大家不要怀疑代码编写问题以及事件触发问题。如果我把dll里面代码注册GuiPlcSocket 事件放在新建的项目中,只要我注册成功了,事件就能被触发。这个事件是由硬件触发的。

我不太明白,为什么在外面的GUI项目可以触发,而把注册事件与回调函数放在dll里面,成功注册,但是回调函数不能执行?

------解决方案--------------------
如果我把dll里面代码注册GuiPlcSocket 事件放在新建的项目中,只要我注册成功了,事件就能被触发。这个事件是由硬件触发的。


这是怎么写,看看。