我正在开发一个.NET库,以便.NET代码轻松使用LibTiePie。
相关库代码(C#):
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#):
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方法来实现它吗?
答案 0 :(得分:2)
实施IDisposable界面。
消费者可以这样做:
using (Device d = new Device(handle))
{
...
}
这将确定底层句柄的关闭。另请参阅using关键字的文档。
不是在终结器中调用API.DevClose(_handle)
,而是在Dispose()
中执行此操作。 MSDN链接有一个很好的例子,说明如何使用此模式来关闭本机句柄。