C#引用托管对象概述

学习C#语言时,经常会遇到C#引用托管对象问题,这里将介绍C#引用托管对象问题的解决方法。

如果在调用平台 invoke 后的任何位置都未C#引用托管对象,则垃圾回收器可能将完成该托管对象。这将释放资源并使句柄无效,从而导致平台invoke 调用失败。用 HandleRef 包装句柄可保证在平台invoke 调用完成前,不对托管对象进行垃圾回收。

C#引用托管对象例如下面:

FileStream fs = new FileStream( "a.txt", FileMode.Open );  



StringBuilder buffer = new StringBuilder( 5 );  




int read = 0;  



ReadFile(fs.Handle, buffer, 5, out read, 0 );   


//调用Win API中的ReadFile函数