使用Ticker C#的GetForegroundWindow() - 降低CPU使用率

时间:2011-03-23 22:08:55

标签: c# timer monitor cpu-usage foreground

我正在创建一个监控计算机使用情况的程序。该程序的一部分要求我始终知道前景窗口是什么。这是通过以下代码实现的:

    // Returns the name of the process owning the foreground window.
    private static Process GetForegroundProcess()
    {
        try
        {
            IntPtr hwnd = GetForegroundWindow();
            // The foreground window can be NULL in certain circumstances, 
            // such as when a window is losing activation.
            uint pid;
            GetWindowThreadProcessId(hwnd, out pid);

            Process p = Process.GetProcessById((int)pid);

            return p;
        }
        catch (Exception)
        {
            return null;
        }
    }

我遇到的问题是CPU消耗。这逐渐使用我的所有CPU,因为它在每秒钟滴答的代码中被调用。对于程序中的核心功能,每秒钟都需要滴答作响。

我的问题是,如果没有我的程序冻结计算机,有没有办法解决这个问题?

感谢您的时间和回复!

1 个答案:

答案 0 :(得分:0)

代码运行时禁用计时器!如果它比计时器慢,它会锁定你的系统。 在后台线程上执行代码,看看是否有不同的API来获得更好的相同信息。