callbackOnCollectedDelegate错误:托管代码到非托管代码

博客介绍了作者在开发键盘记录程序时遇到的callbackOnCollectedDelegate错误,该错误源于托管代码向非托管代码传递已垃圾回收的委托。通过分析,作者发现是由于CLR垃圾回收机制导致的问题,并提供了解决方案,即确保在非托管函数指针的生命周期内保持对委托的引用。此外,还提及了UI线程与非UI线程的交互以及DataGridView的数据绑定问题。
摘要由CSDN通过智能技术生成

前几天写的键盘记录程序一直有个bug,没处理.

问题是这样的:  当我频繁不断的敲击键盘的时候, 过不一会儿,

程序就崩溃,自动关闭.

我的程序逻辑是这样的:

1: 首先,在系统钩子链表中注册一个全局键盘钩子.

2: 在这个键盘钩子的回调函数中转发键盘消息到我

的自处理线程.(转发时,设置标志位WM_User)

3: 在自处理线程中开一个循环. 不停的读取消息列表,

读到标志为WM_User的消息时,将其显示在ListBox中.

整个处理流程看起来很直观. 当时比较乱,一时间无法确定问题

到底出在哪里.

今天刚好有兴趣,翻出来代码详细看了下, 以Debug模式运行,

疯狂按了会儿键盘后, 程序抛出异常:

callbackOnCollectedDelegate

对“WindowsFormsApplication1!WindowsFormsApplication1.Form1+HookProc::Invoke”
类型的已垃圾回收委托进行了回调。这可能会导致应用程序崩溃、损坏和数据丢失。
向非托管代码传递委托时,托管应用程序必须让这些委托保持活动状态,直到确信不会再次调用它们。

原来是托管与非托管间的破事儿. 在MSDN中搜索 “callba

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值