日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關咨詢
選擇下列產品馬上在線溝通
服務時間:8:30-17:00
你可能遇到了下面的問題
關閉右側工具欄

新聞中心

這里有您想知道的互聯(lián)網營銷解決方案
C#引用托管對象概述

學習C#語言時,經常會遇到C#引用托管對象問題,這里將介紹C#引用托管對象問題的解決方法。

如果在調用平臺 invoke 后的任何位置都未C#引用托管對象,則垃圾回收器可能將完成該托管對象。這將釋放資源并使句柄無效,從而導致平臺invoke 調用失敗。用 HandleRef 包裝句柄可保證在平臺invoke 調用完成前,不對托管對象進行垃圾回收。

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

 
 
 
  1. FileStream fs = new FileStream( "a.txt", FileMode.Open );
  2. StringBuilder buffer = new StringBuilder( 5 );
  3. int read = 0;
  4. ReadFile(fs.Handle, buffer, 5, out read, 0 ); 
  5. //調用Win API中的ReadFile函數(shù)

由于fs是托管對象,所以有可能在平臺調用還未完成時候被垃圾回收站回收。將文件流的句柄用HandleRef包裝后,就能避免被垃圾站回收:

 
 
 
  1. [ DllImport( "Kernel32.dll" )]
  2. public static extern bool ReadFile(
  3. HandleRef hndRef,
  4. StringBuilder buffer,
  5. int numberOfBytesToRead,
  6. out int numberOfBytesRead,
  7. ref Overlapped flag );
  8. ......
  9. ......
  10. FileStream fs = new FileStream( "HandleRef.txt", FileMode.Open );
  11. HandleRef hr = new HandleRef( fs, fs.Handle );
  12. StringBuilder buffer = new StringBuilder( 5 );
  13. int read = 0;
  14. // platform invoke will hold reference to HandleRef until call ends
  15. ReadFile( hr, buffer, 5, out read, 0 );

文章名稱:C#引用托管對象概述
鏈接地址:http://www.dlmjj.cn/article/ccscheh.html