事件注册的回调函数不能执行。分少了点,但有关问题很费解
事件注册的回调函数不能执行。分少了点,但问题很费解,求救
我的GUI在调用dll里面的一个方法HandControlValve7_Value()的时候,这个方法里面注册了一个事件。回调函数也是在这个dll里面写的,为什么回调函数无法触发?
接下来,我新建一个项目,引用这个dll,窗口上添加一个按钮,这样写
好,我调用了这个方法HandControlValve7_Value(),注册了事件,但是事件PlcSocket_OnDeviceStatus没有执行。
大家不要怀疑代码编写问题以及事件触发问题。如果我把dll里面代码注册GuiPlcSocket 事件放在新建的项目中,只要我注册成功了,事件就能被触发。这个事件是由硬件触发的。
我不太明白,为什么在外面的GUI项目可以触发,而把注册事件与回调函数放在dll里面,成功注册,但是回调函数不能执行?
------解决方案--------------------
如果我把dll里面代码注册GuiPlcSocket 事件放在新建的项目中,只要我注册成功了,事件就能被触发。这个事件是由硬件触发的。
这是怎么写,看看。
我的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 事件放在新建的项目中,只要我注册成功了,事件就能被触发。这个事件是由硬件触发的。
这是怎么写,看看。