Простой .exe с использованием 50% ЦП с использованием System.Threading - PullRequest
3 голосов
/ 17 марта 2011

У меня есть очень простой исполняемый файл, который проверяет определенную папку каждые 3 секунды, чтобы увидеть, есть ли там файл (ы).Если он находит файл (ы), он что-то делает, а затем возвращается к проверке папки каждые 3 секунды.

Люди сообщают, что иногда этот исполняемый файл занимает 50% их ЦП, есть ли какие-либо предложениякак это сделать правильно.Ниже приведен пример кода, как я это делаю.

// Check our folder every x seconds
Timer = new System.Threading.Timer(TimerCallback, null, 0, Global.SecondsToCheckPrintFolder * 1000);

Ответы [ 2 ]

9 голосов
/ 17 марта 2011

Вы должны использовать FileSystemWatcher.

Чтобы ответить на ваш вопрос, ваш основной поток, вероятно, работает while(true) { }, что навсегда убьет процессор.

Чтобы основной поток ждал вечно, вы должны вызвать Application.Run().
Вы также можете позвонить Thread.Sleep(-1).

1 голос
/ 17 марта 2011

Это выполняется внутри пула потоков, что означает, что обратный вызов может выполняться несколько раз одновременно. Почему бы не использовать простой цикл, например?

while(true)
{
    if (File.Exists(@"someFile"))
    {
         // Do stuff
    }
    Thread.Sleep(3000);
}
...