首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

事件注册的回调函数不能执行。分少了点,但有关问题很费解

2012-04-28 
事件注册的回调函数不能执行。分少了点,但问题很费解,求救我的GUI在调用dll里面的一个方法HandControlValve

事件注册的回调函数不能执行。分少了点,但问题很费解,求救
我的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 事件放在新建的项目中,只要我注册成功了,事件就能被触发。这个事件是由硬件触发的。


这是怎么写,看看。

热点排行