如果非托管代码需要多次调用托管代码中的回调,请将委托的引用保存为成员变量
来源:互联网 发布:微信问卷调查软件 编辑:程序博客网 时间:2024/04/30 15:40
如果非托管代码需要多次调用托管代码中的回调,请将委托的引用保存为成员变量。否则会出现类似下面的异常:
检测到 CallbackOnCollectedDelegate
Message: 对“Demo!SomeNamespace.SomeClass+SomeDelegate::Invoke”类型的已垃圾回收委托进行了回调。这可能会导致应用程序崩溃、损坏和数据丢失。向非托管代码传递委托时,托管应用程序必须让这些委托保持活动状态,直到确信不会再次调用它们。
如果不用成员变量,而用局部变量引用被new出来的委托,那么非托管代码可能刚开始的几次回调是OK的,但是接下来就会出现上面所说的异常,原因就在于GC将局部变量和局部变量引用的委托对象都销毁了,非托管代码再去访问那个函数指针时发现指针指向的地址已经无效。
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/Adi_liu/archive/2009/04/13/4069330.aspx
- 如果非托管代码需要多次调用托管代码中的回调,请将委托的引用保存为成员变量
- 如何从托管代码调用DLL中的非托管代码
- 托管代码调用非托管代码
- 托管代码和非托管代码的相互调用
- C#调用非托管的代码
- 非托管代码,托管代码
- 托管代码&非托管代码
- 托管与非托管代码的区别
- 托管与非托管代码的区别
- C#托管代码与C++非托管代码互相调用
- C# 托管代码调用C++非托管代码
- C#托管代码与C++非托管代码互相调用
- C#托管代码与C++非托管代码互相调用
- C#托管代码与C++非托管代码互相调用
- C#托管代码与C++非托管代码互相调用
- C#托管代码调用C++非托管代码
- C#托管代码和C++非托管代码互相调用
- C#托管代码与C++非托管代码互相调用
- 软件架构师书籍
- 与企业信息化有关的常用缩写
- slf4j
- 头痛
- 阻止冒泡事件
- 如果非托管代码需要多次调用托管代码中的回调,请将委托的引用保存为成员变量
- 湖南男孩子
- javascript处理单选按钮(radio)
- 怎样在报表中显示HTML/RTF内容系列之一-SSRS 2008中显示HTML内容
- UNIX下执行文件的减肥工具strip[转载]
- 关于使MVC.net的IIS配置问题
- 微软云计算遭质疑 Sidekick断线资料毁损谁来买单?
- 解决反序列化(Deserialize)无法找到程序集的错误
- 如何获取CPU使用率