GetForegroundWindow () с тикером C # - уменьшить загрузку процессора - PullRequest
1 голос
/ 24 марта 2011

Я создаю программу, которая будет контролировать использование компьютера.Часть этой программы требует, чтобы я всегда знал, что такое окно переднего плана.Это достигается с помощью этого кода:

    // 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;
        }
    }

Проблема, с которой я сталкиваюсь, - это потребление ресурсов процессора.Это постепенно использует весь мой процессор, потому что он вызывается в тикере, который тикает каждую секунду.Тикать каждую секунду необходимо для основных функций в программе.

Тогда у меня возникнет вопрос: есть ли способ решить эту проблему, если моя программа не зависнет на компьютере?

Спасибо за ваше время и ответы!

1 Ответ

0 голосов
/ 24 марта 2011

Отключите таймер, когда ваш код работает !. Если он медленнее, чем таймер, он заблокирует вашу систему. Выполните код в фоновом потоке и посмотрите, есть ли другой API для получения той же информации, которая работает лучше.

...