求问CallbackOnCollectedDelegate问题

Crystalzhou 2009-11-27 05:17:42
检测到 CallbackOnCollectedDelegate
Message: 对“System.Windows.Forms!System.Windows.Forms.NativeMethods+WndProc::Invoke”
类型的已垃圾回收委托进行了回调。这可能会导致应用程序崩溃、损坏和数据丢失。向非托管代码传递委托时,
托管应用程序必须让这些委托保持活动状态,直到确信不会再次调用它们。
...全文
345 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
yjcwin 2012-07-12
  • 打赏
  • 举报
回复
7楼正解,谢谢
paopao_426 2011-04-07
  • 打赏
  • 举报
回复
如果非托管代码需要多次调用托管代码中的回调,请将委托的引用保存为成员变量。否则会出现类似下面的异常:

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

如果不用成员变量,而用局部变量引用被new出来的委托,那么非托管代码可能刚开始的几次回调是OK的,但是接下来就会出现上面所说的异常,原因就在于GC将局部变量和局部变量引用的委托对象都销毁了,非托管代码再去访问那个函数指针时发现指针指向的地址已经无效。



参考CSDN博客,出处:http://blog.csdn.net/Adi_liu/archive/2009/04/13/4069330.aspx
Crystalzhou 2009-11-30
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 wartim 的回复:]
传给非托管代码时, 委托定义成全局,不要定义在方法里
[/Quote]
我没有使用委托
wartim 2009-11-30
  • 打赏
  • 举报
回复
传给非托管代码时, 委托定义成全局,不要定义在方法里
gomoku 2009-11-30
  • 打赏
  • 举报
回复
[Quote=引用楼主 crystalzhou 的回复:]
...(某某某对)已垃圾回收委托进行了回调。这可能会导致应用程序崩溃、损坏和数据丢失。向非托管代码传递委托时,托管应用程序必须让这些委托保持活动状态,直到确信不会再次调用它们。
[/Quote]

错误信息不是已经讲得非常清楚了?
Crystalzhou 2009-11-30
  • 打赏
  • 举报
回复
继续UP
hitlcyu19 2009-11-30
  • 打赏
  • 举报
回复
http://www.cnblogs.com/fourleg/archive/2009/06/06/1497749.html
Crystalzhou 2009-11-30
  • 打赏
  • 举报
回复
偌大的C#区,没有人遇到过吗
superlxl 2009-11-29
  • 打赏
  • 举报
回复
没人?
Crystalzhou 2009-11-29
  • 打赏
  • 举报
回复
没有人遇到过吗

111,120

社区成员

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

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

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