日期:2014-05-17  浏览次数:20977 次

C#DLL中回调函数实现
请教各位:现在用C#封装了一个DLL,想在DLL运行的时候动态回传有关信息给调用的程序,比如打开了串口,下发了什么数据,接收了什么数据,都是在实时的回传,请问怎么实现,不是在C#里调用其他比如C写的DLL里有回调如何调用,而是C#自己的实现,谢谢了!

------解决方案--------------------
http://www.cnblogs.com/cssmystyle/archive/2012/03/15/2397524.html
------解决方案--------------------
不道,来听听。
INVOKE,也没有回调,委托好像也不行。
------解决方案--------------------
引用:
不道,来听听。
INVOKE,也没有回调,委托好像也不行。

委托为何不行

------解决方案--------------------
使用事件或者委托。

------解决方案--------------------
听起来就是Event. 

类似



    public delegate void PortOpenedHander(object sender, EventArgs e);

    类定义
    {
        
        public event PortOpenedHander PortOpened;

        public void OpenPort()
        {
            
            //打开端口
            
            //成功后
            if (PortOpened != null)
                PortOpened(this, new EventArgs());


        }



如果需要的话可以定义自己的EventArgs 类
------解决方案--------------------
本帖最后由 caozhy 于 2012-09-14 09:50:57 编辑
引用:
谢谢楼上各位回复习!我是这么想的,比如DLL本身里:
  //send data to perial
  //call sendMsg 就是想给调用它的程序发数据 sendMsg


而在调用它的程序里,可能是这样的:
  callback(ref msg)
  {
  //接收到sendMsg
  //根据数据及类型程序处理
  }
而它应该是异步的,如果没有数据则不会进入……

按照我说的做就能解决你的问题,不过你需要一个消息句柄,看你想怎么获取了这个是个难点。
SendMessage是同步发送,还有一个异步的叫什么我忘记了,你可以自己定义一个消息,一直监听这个消息
一旦发现是你的消息就进行处理就行了,