c# - 我可以在 C# 的终结器中释放系统资源吗?
问题描述
我在我的程序中进行 Win API 调用,其中一些假设需要释放资源。我可以将这样的释放放入终结器并确保它会被调用吗?
这是我现在在静态方法中的做法:
class KeyboardListener
{
static KeyboardListener() {
AppDomain.CurrentDomain.ProcessExit += new EventHandler(OnProcessExit);
Install(keyboardHook);
}
static void OnProcessExit(object sender, EventArgs e)
{
Uninstall();
}
static void Install(KeyboardHookDelegate proc)
{
using (Process curProcess = Process.GetCurrentProcess())
using (ProcessModule curModule = curProcess.MainModule)
{
keyboardHookID = SetWindowsHookEx(WH_KEYBOARD_LL, proc,
GetModuleHandle(curModule.ModuleName), 0);
}
}
static void Uninstall()
{
UnhookWindowsHookEx(keyboardHookID);
}
现在我想将它重写为非静态并希望决定在哪里Uninstall
打电话。
解决方案
推荐阅读
- python - 如何使用 pybind11 重新加载使用 c++ 源代码构建的 python 模块
- websocket - 无法使用 Agora Web SDK NG 在移动数据上发布 RTC 客户端
- ubuntu - visual studio 2019 无法通过 ssh 进入 wsl ubuntu 18.04
- php - PHP - 使用匹配表达式提取表格的单元格值
- python - 使用 Django 设置 Apache 服务器(希望也使用 git)
- webstorm - WebStorm,在使用整体深色主题时是否可以在预览中使用 GitHub markdown 主题?
- reactjs - 使用 useEffect 渲染的钩子比上一次渲染时更多
- reactjs - 在反应中,将值传递给函数会导致“未终止的模板”以及其他错误
- php - 引用打印的电子邮件主题行没有被电子邮件客户端解码
- reactjs - 如何根据变化的数字渲染多个对象