首页 > 解决方案 > 我可以在 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打电话。

标签: c#winapistatic

解决方案


推荐阅读