C#DLL中回调函数实现

xiaowen01 2012-09-13 02:31:51
请教各位:现在用C#封装了一个DLL,想在DLL运行的时候动态回传有关信息给调用的程序,比如打开了串口,下发了什么数据,接收了什么数据,都是在实时的回传,请问怎么实现,不是在C#里调用其他比如C写的DLL里有回调如何调用,而是C#自己的实现,谢谢了!
...全文
544 17 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
lvgangyumiao 2013-12-03
  • 打赏
  • 举报
回复
public partial class Form1 : Form { delegate void CallBackFun(); public Form1() { InitializeComponent(); } private static void callBackFun() { MessageBox.Show("callback!"); } private void button1_Click(object sender, EventArgs e) { TestCallback(cb); } private CallBackFun cb = new CallBackFun(callBackFun); private void TestCallback(CallBackFun b) { MessageBox.Show("TestOk!"); b(); } }
风吹腚腚凉 2012-09-14
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 的回复:]
为什么我看不见我的回帖?
[/Quote]
CSDN有问题
风吹腚腚凉 2012-09-14
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 的回复:]
谢谢楼上各位回复习!我是这么想的,比如DLL本身里:
//send data to perial
//call sendMsg 就是想给调用它的程序发数据 sendMsg


而在调用它的程序里,可能是这样的:
callback(ref msg)
{
//接收到sendMsg
//根据数据及类型程序处理
}
而它应该是异步的,如果没有数据则不会进入……
[/Quote]
按照我说的做就能解决你的问题,不过你需要一个消息句柄,看你想怎么获取了这个是个难点。
SendMessage是同步发送,还有一个异步的叫什么我忘记了,你可以自己定义一个消息,一直监听这个消息
一旦发现是你的消息就进行处理就行了,
宝_爸 2012-09-14
  • 打赏
  • 举报
回复
为什么我看不见我的回帖?
xiaowen01 2012-09-14
  • 打赏
  • 举报
回复
谢谢楼上各位回复习!我是这么想的,比如DLL本身里:
//send data to perial
//call sendMsg 就是想给调用它的程序发数据 sendMsg


而在调用它的程序里,可能是这样的:
callback(ref msg)
{
//接收到sendMsg
//根据数据及类型程序处理
}
而它应该是异步的,如果没有数据则不会进入到运行内部,不知我的表达是否准确,大家讲的委托和事件应该都是基于同一个程序内部的,也许我的认识有错,再次向大家请教!
宝_爸 2012-09-14
  • 打赏
  • 举报
回复
听起来就是Event.

类似



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

类定义
{

public event PortOpenedHander PortOpened;

public void OpenPort()
{

//打开端口

//成功后
if (PortOpened != null)
PortOpened(this, new EventArgs());


}



如果需要的话可以定义自己的EventArgs 类
YapingXin 2012-09-14
  • 打赏
  • 举报
回复
所谓callback,就是传一个函数的指针,或者委托,作为函数的输入参数之一。

仙剑 2012-09-14
  • 打赏
  • 举报
回复
用事件和委托
风吹腚腚凉 2012-09-13
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 的回复:]
class MyLibaray
{
public void foo(Action callback)
{
...
callback();
}
}
[/Quote]
用自定义消息好么,真不是我想调戏你好么?
你好好想想,如果是本程序引用了这个DLL的话,还用监视这个DLL干嘛?
那个DLL根本不确保会被当前程序集引用,才会有这个问题。
threenewbee 2012-09-13
  • 打赏
  • 举报
回复
class MyLibaray
{
public void foo(Action callback)
{
...
callback();
}
}
threenewbee 2012-09-13
  • 打赏
  • 举报
回复
使用事件或者委托。
zhleiyang 2012-09-13
  • 打赏
  • 举报
回复
用Action或者Func
真相重于对错 2012-09-13
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 的回复:]

不道,来听听。
INVOKE,也没有回调,委托好像也不行。
[/Quote]
委托为何不行
xiaowen01 2012-09-13
  • 打赏
  • 举报
回复
TO:Trent1985
DLL内部是如何写的呢,调用DLL那是没问题的。
shizhu820228 2012-09-13
  • 打赏
  • 举报
回复
不道,来听听。
INVOKE,也没有回调,委托好像也不行。
Trent1985 2012-09-13
  • 打赏
  • 举报
回复
你在需要的地方动态调用以下DLL就行了!

111,092

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧