首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >.NET对象设计:硬件句柄和垃圾收集

.NET对象设计:硬件句柄和垃圾收集
EN

Stack Overflow用户
提问于 2014-01-30 12:24:54
回答 1查看 131关注 0票数 1

我正在开发一个.NET库,以便通过.NET代码方便地使用LibTiePie

相关图书馆代码(C#):

代码语言:javascript
复制
using Handle = UInt32;

public static class API
{
    [DllImport(@"libtiepie.dll", CallingConvention = CallingConvention.Cdecl)]
    public static extern void DevClose(Handle device);
};

public class Device
{
    protected Handle _handle;

    public Device(Handle handle)
    {
        _handle = handle;
    }

    ~Device()
    {
        API.DevClose(_handle);
    }
}

程序代码(C#):

代码语言:javascript
复制
Device dev = new Device( some_valid_open_handle );

// Do something useful with dev

dev = null; // How can I make sure that the handle is closed now, as the GC may not cleanup it directly?

我可以添加Close方法,Device类,它可以在释放引用之前调用。但奇怪的是,是否有更好的.NET方式来实现这一点呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-01-30 12:28:20

实现IDisposable接口。

然后,消费者可以:

代码语言:javascript
复制
using (Device d = new Device(handle)) 
{ 
    ... 
} 

这将提供基础句柄的确定性关闭。还请参阅关于使用关键字的文档。

而不是在终结器中调用API.DevClose(_handle),然后在Dispose()中这样做。MSDN链接有一个很好的例子,说明如何使用此模式关闭本机句柄。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21456482

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档