偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

C#引用托管對(duì)象概述

開發(fā) 后端
這里介紹C#引用托管對(duì)象,如果在調(diào)用平臺(tái) invoke 后的任何位置都未C#引用托管對(duì)象,則垃圾回收器可能將完成該托管對(duì)象。

學(xué)習(xí)C#語言時(shí),經(jīng)常會(huì)遇到C#引用托管對(duì)象問題,這里將介紹C#引用托管對(duì)象問題的解決方法。

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

C#引用托管對(duì)象例如下面:

  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. //調(diào)用Win API中的ReadFile函數(shù) 

由于fs是托管對(duì)象,所以有可能在平臺(tái)調(diào)用還未完成時(shí)候被垃圾回收站回收。將文件流的句柄用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 ); 

【編輯推薦】

  1. C# this關(guān)鍵字詳解
  2. C#調(diào)用析構(gòu)方法詳解
  3. C#釋放托管資源簡(jiǎn)單描述
  4. C#單路代理簡(jiǎn)單分析
  5. C#文法產(chǎn)生式概述
責(zé)任編輯:佚名 來源: 博客園
相關(guān)推薦

2009-08-31 09:44:23

C# Employee

2009-08-25 10:08:39

C# MyData對(duì)象

2009-08-10 13:40:46

創(chuàng)建C# COM對(duì)象

2009-08-17 13:49:20

C#中調(diào)用Window

2009-08-19 10:25:18

C#托管資源

2009-08-18 09:26:07

C#線程功能

2009-08-13 15:18:23

C#文件上傳

2009-08-18 17:29:02

C#使用指針

2009-09-03 11:15:38

C#設(shè)置Coopera

2009-07-31 14:08:54

C# 匿名函數(shù)

2009-08-20 16:28:45

C#匿名方法

2009-08-19 11:09:00

C# Cast<T>

2009-08-17 09:57:00

C# Windows

2009-08-24 18:09:13

C#構(gòu)造函數(shù)

2009-09-03 10:42:16

C# Employee

2009-08-25 16:49:44

C#使用if語句

2009-09-02 10:39:00

C#釋放托管資源

2009-08-14 17:09:48

C#引用類型

2009-09-04 14:41:09

C#同步線程

2009-07-31 15:37:45

C#靜態(tài)構(gòu)造函數(shù)
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)